Вопросы с тегом «aggregate-initialization»

99
Инициализация массива членов в инициализаторе конструктора

class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; Я считаю, что причина в том, что массивы можно инициализировать только с помощью = синтаксиса, а именно: int arr[3] = {1,3,4}; Вопросы Как я могу делать то, что хочу...

92
Когда частный конструктор не является частным конструктором?

Допустим, у меня есть тип, и я хочу сделать его конструктор по умолчанию закрытым. Я пишу следующее: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error C2248: 'C::C' cannot...

85
Сужающие преобразования в C ++ 0x. Это только у меня, или это похоже на переломную ситуацию?

C ++ 0x сделает следующий код и аналогичный код некорректным, поскольку он требует так называемого сужающего преобразования a doubleв a int. int a[] = { 1.0 }; Мне интересно, часто ли этот вид инициализации используется в реальном коде. Сколько кода будет нарушено этим изменением? Сложно ли...

43
Можно ли предотвратить пропуск элементов инициализации агрегата?

У меня есть структура со многими членами одного типа, как это struct VariablePointers { VariablePtr active; VariablePtr wasactive; VariablePtr filename; }; Проблема в том, что если я забуду инициализировать один из членов структуры (например wasactive), например: VariablePointers{activePtr,...

9
Скрыть пустой базовый класс для агрегатной инициализации

Рассмотрим следующий код: struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } Вот как вы должны инициализировать B: B<int, 3> b = { {}, {1, 2, 3} }; я хочу избежать ненужного пустого {} для базового класса. Существует решение , предложенное...