Вопросы по теме 'aggregate-initialization'
Вызывают ли пустые фигурные скобки конструктор по умолчанию или конструктор, принимающий std :: initializer_list?
Ниже приводится цитата из Эффективный современный C ++ (стр. 55):
«Предположим, что вы используете пустой набор фигурных скобок для создания объекта, который поддерживает конструктор по умолчанию, а также поддерживает конструкцию std ::...
2321 просмотров
schedule
23.11.2021
Является ли инициализация элемента побочным эффектом предложения инициализатора?
В пункте 8.6.4p4 документа N4606 , у нас есть:
Внутри списка-инициализаторов списка braced-init-list предложения-инициализатора , ... оцениваются в том порядке, в котором они появились. То есть каждое вычисление значения и побочный...
39 просмотров
schedule
22.10.2021
Как написать руководство по дедукции для псевдонимов агрегатных шаблонов?
С помощью C ++ 20 можно создать рекомендации по дедукции для шаблона псевдонима (см. Раздел «Вычисление для шаблонов псевдонимов» по адресу https://en.cppreference.com/w/cpp/language/class_template_argument_deduction ). Тем не менее, я не мог...
213 просмотров
schedule
07.10.2021
Инициализировать атомарные элементы в совокупности
Кажется, нет способа инициализировать атомарные элементы в совокупности с помощью С++ 14. Следующее не работает ( на gcc 8.0.1 ):
#include <atomic>
#include <iostream>
struct stru {
std::atomic_int32_t val_0;
std::atomic_int32_t...
813 просмотров
schedule
28.06.2022
Агрегатная инициализация обходит конструктор частного класса
Я всегда думал, что агрегатная инициализация предназначена для того, чтобы избавить программистов от написания пользовательских конструкторов. Однако это, похоже, прокралось в обход безопасности для частных конструкторов.
Скажем, у меня есть class...
61 просмотров
schedule
12.07.2022
Агрегатная инициализация анонимной структуры с назначенными инициализаторами
Я переношу устаревший код C++ для работы с GCC 9.2. Использование расширений C++20 и GNU является допустимым вариантом.
Устаревший код активно использует анонимные структуры, вложенные в объединения, и агрегированную инициализацию с назначенными...
295 просмотров
schedule
28.07.2022
Инициализировать std::array, используя тип элемента из объявления неявно
В следующем коде я пытаюсь инициализировать массивы (необработанные C-classic и std::array ), сводя к минимуму использование типа элемента, т.е. S :
#include <array>
struct S { unsigned u; int i; };
auto std_array = std::array<S,...
86 просмотров
schedule
30.08.2022
Разрешена ли агрегированная инициализация битовых полей?
У меня есть структура, содержащая битовые поля:
struct Foo {
unsigned a : 16, b : 16;
};
И я хочу знать, могу ли я использовать агрегированную инициализацию для его битовых полей. Например:
struct Foo bar = {13, 42};
Я отмечаю,...
625 просмотров
schedule
05.09.2022
Безопасны ли значения, переданные в предыдущие места, для чтения из соответствующих элементов в заданном месте в совокупном списке инициализации?
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 просмотров
schedule
30.01.2023
С++ 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 просмотров
schedule
03.03.2023
Почему 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 просмотров
schedule
05.12.2022
Агрегатная инициализация не поддерживает доступ к конструктору
Учитывая приведенный ниже пример, я был удивлен, обнаружив, что, несмотря на то, что конструктор по умолчанию был явно удален (или сделан по умолчанию, если на то пошло), агрегатная инициализация оставалась возможной.
#include <iostream>...
823 просмотров
schedule
10.11.2023
C++ - создание класса-оболочки вокруг структуры с тем же синтаксисом, что и у структуры
Это продолжение моего предыдущего вопроса: C++ - Создание класса-оболочки с тем же синтаксисом, что и у обернутых данных
По сути, я пытаюсь создать шаблон оболочки для некоторых данных и построить/установить оболочку с тем же синтаксисом, что и...
51 просмотров
schedule
29.01.2024