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

Равномерная инициализация производного класса с тривиальным ctor
Я пытаюсь обдумать некоторые угловые случаи с униформной инициализацией С++ 11, и я не могу понять, почему это так: struct Base { int x,y,z; }; struct Derived : Base { }; static_assert (std::is_trivial<Base>::value, "Base must be...
1491 просмотров

Почему я не могу инициализировать структуру, полученную из другой структуры?
Когда я запускаю этот код: struct X { int a; }; struct Y : public X {}; X x = {0}; Y Y = {0}; Я получил: error: could not convert ‘{0}’ from ‘<brace-enclosed initializer list>’ to ‘Y’ Почему инициализация скобок работает...
12338 просмотров
schedule 31.07.2022

Почему инициализация списка (с использованием фигурных скобок) лучше, чем альтернативы?
MyClass a1 {a}; // clearer and less error-prone than the other three MyClass a2 = {a}; MyClass a3 = a; MyClass a4(a); Почему?
196279 просмотров

Почему Foo({}) вызывает Foo(0) вместо Foo()?
Исполняемые файлы, созданные clang 3.5.0 и gcc 4.9.1 из кода #include <iostream> struct Foo { Foo() { std::cout << "Foo()" << std::endl; } Foo(int x) { std::cout << "Foo(int = " << x << ")" <<...
1211 просмотров

Сужение преобразования в bool при инициализации списка - странное поведение
Рассмотрим этот фрагмент кода C++11: #include <iostream> struct X { X(bool arg) { std::cout << arg << '\n'; } }; int main() { double d = 7.0; X x{d}; } При инициализации x происходит сужающее преобразование...
2916 просмотров

инициализация списка копирования по сравнению с инициализацией прямого списка временных
Учитывая следующую структуру: struct ABC { ABC(){cout << "ABC" << endl;} ~ABC() noexcept {cout << "~ABC" << endl;} ABC(ABC const&) {cout << "copy" << endl;} ABC(ABC&&) noexcept {cout...
617 просмотров

Можно ли использовать синтаксис инициализации скобок C++11, чтобы избежать объявления тривиальных конструкторов для простых агрегатов?
Допустим, у меня есть следующий код: #include <vector> struct Foo { int tag = 0; std::function<void ()> code; }; int main() { std::vector<Foo> v; } И теперь я хочу добавить новый элемент Foo в вектор с...
1589 просмотров

Многомерный список инициализаторов, заключенный в фигурные скобки, в мультивектор
То, что я хочу, - это возможность генерировать матрицу 5x5 с помощью списка инициализаторов, заключенного в фигурные скобки. Чтобы потом это выглядело так: enum class MyListType { EMPTY, A }; auto matrix = { {MyListType::EMPTY,...
334 просмотров
schedule 18.01.2023

Формы инициализации списка
См. следующий код: std::vector<int> v1{1, 2, 3}; std::vector<int> v2 = {1, 2, 3}; Мои вопросы: Есть ли разница между ними? Я знаю, что первое должно быть инициализацией списка, но как насчет второго? Поскольку для...
664 просмотров

Как передать список инициализации в скобках конструктору `std::array`?
Можно ли передать точный список инициализации в скобках конструктору std::array ? Это может быть необходимо, поскольку std::array не поддерживает назначение списка инициализаторов. Попытка адаптировать принятый ответ на этот вопрос: Как...
196 просмотров

void{} vs void() в качестве инициализатора void
Конструкцию void() можно использовать для «создания значения типа void » (странно, но факт). Но синтаксис инициализации C++11+ с фигурными скобками в таком случае не работает: int f_int_parenthesis() { return int(); // OK } int...
97 просмотров

Почему инициализация скобок C++ не поддерживается для агрегатов с закрытыми членами?
По моему мнению, следующее концептуально не нарушает конфиденциальность. Но это запрещено. struct A { int a; int b; int c; }; struct B { int a; int b; private: int c; }; int main (int argc, char *...
631 просмотров

Инициализация списка C++ допускает несколько определяемых пользователем преобразований
Я читал этот ответ , в котором есть следующий пример: struct R {}; struct S { S(R); }; struct T { T(const T &); //1 T(S); //2 }; void f(T); void g(R r) { f({r}); } Ответ связан со старой версией [over.best.ics]/4,...
180 просмотров

C++: особенности рассмотрения, но не вызова конструкторов
На cppreference об инициализации списка во втором намерении (для копирования-списка- инициализация) он говорит: copy-list-initialization (рассматриваются как явные, так и неявные конструкторы, но могут вызываться только неявные конструкторы)...
131 просмотров

Проблема с вызовом шаблона функции с переменным числом аргументов при передаче аргументов списка инициализатора скобок
Рассмотрим этот шаблон функции: template <class... T> void foo (std::tuple<T, char, double> ... x); Этот вызов работает: using K = std::tuple<int, char, double>; foo ( K{1,'2',3.0}, K{4,'5',6.0}, K{7,'8',9.0} );...
590 просмотров

Скобки вокруг скалярного инициализатора при использовании массива структуры в структуре
Я пытаюсь сделать простое меню. Для этого я хочу использовать структуру, которая является меню и содержит массив структур пунктов меню. Главное меню - Программы - Настройки Пункты меню содержат некоторую дополнительную информацию, такую ​​как...
158 просмотров

Разница между S () и S {}?
В приведенном ниже коде есть ли разница между двумя присвоениями значения? В обоих случаях будет ли value.v создан по умолчанию, а x будет инициализирован равным 42? struct S { std::vector<int> v; int x = 42; }; S value; void foo()...
1199 просмотров
schedule 25.08.2022

Как работает эта подобная списку инициализация?
Я знаю о нескольких типах инициализации в C++ и недавно узнал, почему альтернативы">предпочтительна инициализация списка . Но как насчет этого кода? демонстрация #include <iostream> #include <string> class A { public: A(int...
31 просмотров

Почему мы не можем опустить емкость переменной-члена типа массива со списком инициализаторов по умолчанию в современном C++?
В современном C++ переменные-члены могут быть явно инициализированы. Однако, хотя мы можем опустить емкость массива при определении локального массива в функции со списком инициализаторов, мы не можем опустить емкость члена массива, даже если у него...
45 просмотров

Как передать список инициализаторов, заключенных в фигурные скобки, в функцию?
Я хочу написать функцию, которую можно использовать с аргументом, который в противном случае мог бы возникнуть непосредственно в цикле на основе диапазона: template <typename Iterable> void sayIt(const Iterable& stuff) { for (const...
363 просмотров