Вопросы по теме 'aggregate-initialization'

Вызывают ли пустые фигурные скобки конструктор по умолчанию или конструктор, принимающий std :: initializer_list?
Ниже приводится цитата из Эффективный современный C ++ (стр. 55): «Предположим, что вы используете пустой набор фигурных скобок для создания объекта, который поддерживает конструктор по умолчанию, а также поддерживает конструкцию std ::...
2321 просмотров
schedule 23.11.2021

Является ли инициализация элемента побочным эффектом предложения инициализатора?
В пункте 8.6.4p4 документа N4606 , у нас есть: Внутри списка-инициализаторов списка braced-init-list предложения-инициализатора , ... оцениваются в том порядке, в котором они появились. То есть каждое вычисление значения и побочный...
39 просмотров

Как написать руководство по дедукции для псевдонимов агрегатных шаблонов?
С помощью C ++ 20 можно создать рекомендации по дедукции для шаблона псевдонима (см. Раздел «Вычисление для шаблонов псевдонимов» по ​​адресу https://en.cppreference.com/w/cpp/language/class_template_argument_deduction ). Тем не менее, я не мог...
213 просмотров

Инициализировать атомарные элементы в совокупности
Кажется, нет способа инициализировать атомарные элементы в совокупности с помощью С++ 14. Следующее не работает ( на gcc 8.0.1 ): #include <atomic> #include <iostream> struct stru { std::atomic_int32_t val_0; std::atomic_int32_t...
813 просмотров

Агрегатная инициализация обходит конструктор частного класса
Я всегда думал, что агрегатная инициализация предназначена для того, чтобы избавить программистов от написания пользовательских конструкторов. Однако это, похоже, прокралось в обход безопасности для частных конструкторов. Скажем, у меня есть class...
61 просмотров

Агрегатная инициализация анонимной структуры с назначенными инициализаторами
Я переношу устаревший код C++ для работы с GCC 9.2. Использование расширений C++20 и GNU является допустимым вариантом. Устаревший код активно использует анонимные структуры, вложенные в объединения, и агрегированную инициализацию с назначенными...
295 просмотров

Инициализировать std::array, используя тип элемента из объявления неявно
В следующем коде я пытаюсь инициализировать массивы (необработанные C-classic и std::array ), сводя к минимуму использование типа элемента, т.е. S : #include <array> struct S { unsigned u; int i; }; auto std_array = std::array<S,...
86 просмотров

Разрешена ли агрегированная инициализация битовых полей?
У меня есть структура, содержащая битовые поля: struct Foo { unsigned a : 16, b : 16; }; И я хочу знать, могу ли я использовать агрегированную инициализацию для его битовых полей. Например: struct Foo bar = {13, 42}; Я отмечаю,...
625 просмотров

Безопасны ли значения, переданные в предыдущие места, для чтения из соответствующих элементов в заданном месте в совокупном списке инициализации?
struct { int a,b; } s = {5, s.a+1}; Согласно стандарту, безопасно ли читать «s.a» в приведенном выше примере, чтобы s инициализировался как a=5 и b=6? Если да, то соблюдает ли это правило большинство компиляторов? (Вышеприведенное...
140 просмотров
schedule 23.03.2023

Могу ли я ссылаться на предыдущих членов списка инициализаторов?
Скажем, я хочу сослаться на член initializer_list , который я уже определил. Могу ли я это сделать? Этот код компилируется и дает ожидаемое: "13 55 " как в Visual Studio, так и в gcc . знайте, что это законно: const int foo[2] = {13, foo[0]...
908 просмотров

С++ 20 инициализирует агрегаты из списка значений в скобках, не поддерживая внутренний массив
C++20 принял p0960 , что позволяет инициализировать агрегаты из списка значений в скобках. Точная формулировка ( [dcl.init] 17.6 .2.2 ) говорит: [...] если ни один конструктор не является жизнеспособным, целевой тип является агрегатным...
188 просмотров
schedule 22.02.2023

GCC очень медленно компилирует большой std::array нетривиального типа
У меня есть два простых класса: #include <type_traits> struct trivial { int m; }; struct non_trivial { non_trivial() {} }; static_assert(std::is_trivial<trivial>::value, "");...
47 просмотров

Почему Clang 12 отказывается инициализировать агрегаты способом C++20?
Насколько я понимаю, в режиме C++20 должна работать следующая программа: #include <vector> struct B{ int a0, a1; }; int main() { std::vector<B> bs; bs.emplace_back( 0, 0 ); } И это действительно так в Visual Studio 2019 и...
100 просмотров

Агрегатная инициализация не поддерживает доступ к конструктору
Учитывая приведенный ниже пример, я был удивлен, обнаружив, что, несмотря на то, что конструктор по умолчанию был явно удален (или сделан по умолчанию, если на то пошло), агрегатная инициализация оставалась возможной. #include <iostream>...
823 просмотров

C++ - создание класса-оболочки вокруг структуры с тем же синтаксисом, что и у структуры
Это продолжение моего предыдущего вопроса: C++ - Создание класса-оболочки с тем же синтаксисом, что и у обернутых данных По сути, я пытаюсь создать шаблон оболочки для некоторых данных и построить/установить оболочку с тем же синтаксисом, что и...
51 просмотров