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

В C++11 инициализация списка относится к инициализации переменной с помощью фигурных скобок.
1 ответ

C++: как выполняется построение по списку инициализации?

C++ позволяет создавать экземпляры класса, устанавливая значение открытых членов через список инициализации, как показано в примере ниже для b1: class B { public: int i; std::string str; }; B b1{ 42,"foo" }; B b2(); ; Однако, если я предоставлю конс…
1 ответ

Концептуально ли инициализация списка копирования вызывает copy ctor?

До C++11 мы можем выполнить инициализацию копирования, написав что-то вроде A a = 1; что более или менее эквивалентно A a = A(1);, То есть сначала создается временный объект, а затем вызывается копия ctor. Независимо от исключения копирования, это д…
2 ответа

Инициализация фигурных скобок без какого-либо значения

Можно ли написать что-то подобное typedef unsigned long DWORD; DWORD nBytesRead = {}; Будет ли эта переменная содержать 0 после этого выражения?
18 сен '15 в 09:40
2 ответа

std:: инициализатор списка строк {} vs {{}}

Так что я занимался поиском и поиском на этом сайте, но я изо всех сил пытаюсь найти ответ на следующий код и надеюсь, что кто-то с большим знанием инициализатора списка может помочь мне понять, что происходит. int main() { std::string t1 = {{}}; st…
23 май '18 в 09:52
2 ответа

Формы инициализации списка

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

Каков возвращаемый тип инициализации списка?

Кто-нибудь хотел бы объяснить, почему дела 1 и 2 имеют разные выходные данные для этого фрагмента кода. struct A { A() { cout << "A()" << endl; } A(int i) { cout << "A(int)" << endl; } A(const A&) { cout << "A(const…
21 сен '17 в 10:36
1 ответ

Класс с инициализацией списка с помощью указателей на функции

Я пытаюсь написать класс, который получит (число) пару (ы) массивов символов (и строк, позже) и указателей на функции, из которых я планирую использовать нужную функцию. Я использую модифицированную версию кода, представленную в этом вопросе, в целя…
26 авг '18 в 00:32
2 ответа

Как построить вектор с уникальными указателями

Я пытаюсь построить вектор с unique_ptr. Но я не нахожу прямой путь. Следующий код не компилируется. Ошибка: Вызов неявно удаленного конструктора копии 'std::__1::unique_ptr >': #include <iostream> #include <memory> #include <utility&…
1 ответ

Список инициализации ссылки: правильно ли GCC или Clang?

Учитывая этот пример: int g_i = 10; struct S { operator int&(){ return g_i; } }; int main() { S s; int& iref1 = s; // implicit conversion int& iref2 = {s}; // clang++ error, g++ compiles fine: // `s` is converted // to a temporary int an…
09 янв '19 в 23:25
1 ответ

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

Учитывая следующую структуру: struct A { template<typename T, std::size_t N> A(T const(&array)[N]) {} template<typename T, std::size_t N> A& operator=(T const(&array)[N]) { return *this; } }; Код: // a is of type A a = {1, 2,…
03 фев '19 в 21:11
3 ответа

Ошибка компиляции при использовании пустого конструктора инициализации списка в C++17

Я столкнулся со странной проблемой при попытке перейти на C++17. Проблема в том, что кое-что (и я не уверен, что) изменилось в C++ 17, что заставило инициализацию списка работать по-другому в случае конструктора по умолчанию. Я пытался найти https:/…
08 янв '19 в 13:23
0 ответов

C++11 инициализация списка не работает

Вот мои файлыscreen.h #ifndef SCREEN_H #define SCREEN_H class Screen { public: using pos = std::string::size_type; Screen() = default; Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht*wd, c) {} char get() const { return contents[c…
0 ответов

Почему нельзя использовать auto & list initialization вместе до g++ 5.1.0?

Рассмотрим следующую программу: #include <iostream> int main() { int n; int fact{1}; std::cout<<"Enter a number: "; std::cin>>n; for(auto i{1};i<=n;i++) fact*=i; std::cout<<"fact of "<<n<<" is "<<fact; } …
02 ноя '15 в 05:51
2 ответа

Вставьте инициализированную в списке пару в std::map

Я пытаюсь вставить в карту только подвижный тип. У меня есть следующий кусок кода: #include <map> class Moveable { public: Moveable() = default; Moveable(const Moveable&) = delete; Moveable(Moveable&&) = default; Moveable& oper…
16 мар '18 в 07:32
2 ответа

Определенные реализацией сужающие преобразования?

C++11 формализовал понятие сужающегося преобразования и запретил использовать его на верхнем уровне при инициализации списка. Мне интересно, если, учитывая два типа T а также U, это может быть определено реализацией, является ли преобразование из T …
1 ответ

Почему тип braced-init-list с одним элементом переключается на тип самого элемента?

В приведенном ниже коде вызов функции-члена F экземпляра b с аргументом {1,2} компилируется и вызывает B::F(std::initializer_list<int>), Но если я удаляю один элемент из списка braced-init-list и использую только {1}, я получаю ошибку 9 : erro…
0 ответов

C++14: Почему я не могу использовать фигурные скобки для `void`?

Довольно часто (по крайней мере, в моем коде) использовать decltype а также std::enable_if_t иметь простой и эффективный выбор SFINAE. Что-то вроде следующего: template <typename A1, typename A2, typename... Auts> inline auto infiltration(cons…
1 ответ

Включить конструктор списка инициализаторов по умолчанию

Я полагаю, что современные списки инициализаторов C++ очень полезны для инициализации объектов, так что отпадает необходимость в определении собственного конструктора: struct point { float coord[3]; }; point p = {1.f, 2.f, 3.f}; // nice ! Однако это…
1 ответ

Как запретить инициализацию пустого списка?

У меня есть класс, в котором нет участников. И поэтому он не предназначен для реализации. Итак, я удалил по умолчанию кр. Это запрещает любую конструкцию, кроме инициализации списка. Есть ли способ это тоже запретить? class Empty{ //No non-static da…
0 ответов

Инициализация списка MSVC ICE при использовании со структурами?

Этот фрагмент кода хорошо компилируется на gcc 8.1 и clang 6.0, но дает ICE на MSVC (предварительный выпуск на 2017 и 2018 годы): #include <vector> #include <string> struct Data { unsigned char data; }; struct A { std::string x; Data y{2…