Описание тега aggregate-initialization

Агрегатная инициализация - это функция C++, которая позволяет инициализировать массивы и агрегированные типы с использованием синтаксиса фигурных скобок.
2 ответа

Совокупная инициализация структуры с использованием собственных членов данных

Это n-й вопрос по этому поводу, но я не смог найти точную копию... Предположим, следующий код: #include <iostream> struct S { int x; int y; }; class C { public: S s; C() : s{123, s.x} {} }; int main() { std::cout << C().s.y << '\n'…
05 апр '17 в 14:28
2 ответа

Как заставить мой векторный класс поддерживать прямую инициализацию / присваивание

Мой вопрос, конечно, глуп, но в моем понимании C++11 и программирования шаблонов так много пробелов, что я не знаю, как к этому подойти. Я катлю свою собственную очень простую библиотеку линейной алгебры: typedef short index_t; template<int M, in…
2 ответа

C++ - инициализация члена массива с агрегатной инициализацией

С этим кодом: struct Structure { int a; char b[4]; }; void function() { int a = 3; char b[] = {'a', 'b', 'c', 'd'}; } Могу ли я инициализировать Structure со значениями a а также b используя агрегатную инициализацию?Я старался Structure{a, b}Однако …
1 ответ

Вызывают ли пустые скобки конструктор по умолчанию или конструктор, принимающий std::initializer_list?

Ниже приводится цитата из Effective Modern C++ (стр. 55): "Предположим, что вы используете пустой набор скобок для создания объекта, который поддерживает конструктор по умолчанию, а также поддерживает конструкцию std::initializer_list. Что означают …
07 июл '15 в 20:11
3 ответа

Почему я могу инициализировать обычный массив из {}, но не std::array

Это работает: int arr[10] = {}; Все элементы arr инициализируются значением в ноль. Почему это не работает: std::array<int, 10> arr({}); Я получаю следующее предупреждение от g++ (версия 4.8.2): предупреждение: отсутствует инициализатор для чл…
4 ответа

Совокупная безопасность инициализации в C++

Предположим, у меня есть следующая структура: struct sampleData { int x; int y; }; И когда используется, я хочу инициализировать переменные sampleData введите в известное состояние. sampleData sample = { 1, 2 } Позже я решаю, что мне нужны дополните…
08 июн '11 в 20:00
1 ответ

Агрегированная инициализация класса, который в частном порядке наследует агрегатный класс в C++11

Рассмотрим следующий код: struct base { int x, y, z; }; struct derived : private base { using base::base; }; int main(int argc, const char *argv[]) { base b{1, 2, 3}; // Allowed derived d{1, 2, 3}; // Not allowed } Линия derived d{1, 2, 3}; заставля…
0 ответов

Инициализация частного агрегата

Можно ли определить как private агрегатная инициализация для агрегатного класса? Мне бы хотелось, чтобы этот класс мог быть агрегирован-инициализирован только своими статическими закрытыми членами. Пример: struct Size { const unsigned int width; con…
04 мар '16 в 10:02
1 ответ

Инициализировать агрегатный элемент в общем коде шаблона

Например, template <typename T> struct node { T data; node* pnext; }; template <typename T, typename... Us> void func(Us&&... args) { // Initialize a node<T> with data initialized from args... } Пути, которые я могу придума…
0 ответов

Принудительное удаление скобок в вызове функций Variadic

У меня есть два POD struct A { float x; float y; }; struct B { A a; int i; } и переменная функция, которая на месте назначает POD, используя (что я думаю, это) агрегат template<typename T, class... Args> void remake(T* location, Args&&…
8 ответов

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

C++0x сделает следующий код и подобный код плохо сформированным, потому что он требует так называемого сужающего преобразования double к int, int a[] = { 1.0 }; Мне интересно, используется ли этот тип инициализации в коде реального мира. Сколько код…
13 дек '10 в 22:33
1 ответ

С ++17 Агрегированные инициализации

Я смотрю сериал на youtube от Jason Tuner, и на этом конкретном видео, найденном здесь: Aggregate Initializations, он начинает с использования clang ++ C++03, а затем меняет компилятор на clang ++ C++ 11, а затем, когда он включает иерархию базовых …
1 ответ

Инициализация std::array<>

Рассмотрим следующий код: #include &lt;array&gt; struct A { int a; int b; }; static std::array&lt;A, 4&gt; x1 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; static std::array&lt;A, 4&gt; x2 = { { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } } }; static std…
16 июл '15 в 09:06
0 ответов

Тип POD с конструкторами, но без агрегированной инициализации

Я запутался о типах POD в C++, у меня есть эти struct HSVа также struct RGB который представляет собой совокупность значений для построения цвета: struct HSV { int hue; int saturation; int value; }; struct RGB { // RGB(void) = default; // RGB(HSV co…
0 ответов

Тип черт для агрегатов

В соответствии с 8.5.1/1 рабочего проекта, агрегат представляет собой массив или класс без предоставленных пользователем конструкторов, без закрытых или защищенных нестатических элементов данных, без базовых классов и без виртуальных функций. Есть л…
1 ответ

При инициализации структуры с синтаксисом ={}, что происходит внутри?

Немногоотредактировал пример на основе комментариев Небольшой код, а затем вопрос (просто чтобы уточнить, это вопрос C++): #include &lt;cstdio&gt; struct MYSTRUCT1 { int asdf[4]; } MyStruct1; struct MYSTRUCT2 { int asdf[4]; MYSTRUCT2() : asdf() {} }…
11 апр '13 в 16:35
2 ответа

Агрегатная инициализация производного класса std::array

Я делаю небольшой вспомогательный класс, который происходит от std::array, Конструктор, очевидно, не наследует, и именно он отвечает за инициализацию скобок; например: template&lt;typename T, size_t size&gt; struct foo : std::array&lt;T,size&gt; { f…
1 ответ

Должен ли я беспокоиться о инициализаторах Wmissing-field и агрегатной инициализации в C++17?

Я скомпилировал код с GCC с -Wall а также -Wextra включен. Этот код выдает предупреждение: struct A { A(int) {} }; struct B {}; struct C : A, B {}; int main() { (void) C{1}; } main.cpp: In function 'int main()': main.cpp:11:15: warning: missing init…
10 дек '17 в 05:51
1 ответ

C++11 initializer_list не работает для буквального значения константы встроенного объекта?

У меня есть простая программа на C++ 11: struct A{ int i; struct B{ int i; int j; }; } a = {2, {3, 4}}; g ++ - 7 компилируется и выдает ошибку: error: too many initializers for 'A' }a={2,{3,4}}; ^ Мне просто интересно, как я могу объявить объект A с…
2 ответа

Как инициализировать boost::array с пользовательской структурой?

Я ищу хорошее решение, как инициализировать статический boost::array с пользовательской структурой пользователя и данными. Мой пример, что я ожидаю от boost::arrayниже: struct Foo { std::string a; std::string b; }; static boost::array&lt; Foo, 2 &gt…
04 фев '13 в 10:25