Если у класса есть объявленный пользователем конструктор, который принимает параметр типа std::initializer_list, то он должен быть единственным конструктором, кроме конструкторов функций специальных представителей
Если класс имеет объявленный пользователем конструктор, который принимает параметр типа std::initializer_list, то он должен быть единственным конструктором, кроме конструкторов функций специальных представителей.
Если класс содержит конструктор, который принимает параметр типа std::initializer_list
и другой конструктор с параметрами, скрепленными инициализациями, такими как:
classType obj {0,1}
std::initializer_list
параметр, но разработчики могут ожидать в противном случае.Checker помечает определения классов, которые содержат конструктор, первый параметр которого имеет тип std::initializer_list
и также содержит другой конструктор (исключая конструкторы функций специальных представителей). За нарушением правил следуют события, которые указывают на расположение других конструкторов, которые могут привести к путанице со std::initializer_list
конструктор.
Определение класса со std::initializer_list
-параметр конструктор, который не нарушает это правило имеет только по умолчанию, копировать и перемещать конструкторы (и копировать и перемещать операторов назначения). Если вы не можете избежать второго конструктора с параметрами, можно обосновать это нарушение правила. В этом случае для инициализации со списком используйте такой синтаксис, как:
classType obj ({0,1})
std::initializer_list
-параметровый конструктор вызывается. Для инициализации с другими конструкторами используйте синтаксис, такой как:classType obj (0,1)
()
, но позволяет такие инициализации для классов со смесью std::initializer_list
-параметровый конструктор и другие конструкторы.Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Деклараторы |
Категория: Консультационные, Автоматизированные |