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

Почему в стандарте проводится различие между инициализацией прямого списка и инициализацией списка копирования?
Мы знаем, что T v(x); называется прямой инициализацией , а T v = x; называется инициализацией копирования , что означает, что он создаст временный T из x , который будет скопирован / перемещен в v (что, скорее всего, опущено). Для...
3581 просмотров

Влияет ли знак равенства на инициализацию фигурной скобки? например. «T a = {}» против «T a {}»
Вот два способа инициализировать переменную в C++11: T a {something}; T a = {something}; Я проверил эти два во всех возможных сценариях и не заметил разницы. Этот ответ предполагает, что между ними есть тонкая разница: Для...
2157 просмотров

Почему Clang и VS2013 принимают перемещаемые аргументы по умолчанию, инициализированные скобками, но не GCC 4.8 или 4.9?
Как следует из названия, у меня есть короткая демонстрационная программа, которая компилируется всеми этими компиляторами, но при запуске с помощью gcc 4.8 и gcc 4.9 сбрасывает дамп ядра: Есть идеи, почему? #include <unordered_map>...
1666 просмотров
schedule 02.07.2022

Списки инициализации в фигурных скобках и порядок вывода типа шаблона функции
У меня есть вопрос относительно процедуры вывода типа параметра шаблона функции. Возьмите этот пример: #include <vector> #include <sstream> #include <string> #include <iterator> #include <fstream> int main() {...
390 просмотров

Не удается преобразовать тип при инициализации
Я думаю, что я что-то пропустил, и я не знаю, что именно. Давайте посмотрим на фрагмент кода. template <typename T> struct Foo { Foo (int n, int p, string s, T t = {}) : m_n {n}, m_p {p}, m_s {s}, m_t {t} {} const int...
6180 просмотров
schedule 13.11.2023

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

Вывод типа std::initializer_list
Недавно я написал очень простой класс. class C { public: void AddString(std::initializer_list<std::pair<const char*,int>> x) { //irrelevant } }; int main() { C c; c.AddString({ {"1",1},...
607 просмотров

Разрешение перегрузки, когда аргумент является списком инициализаторов, а параметр является ссылкой
struct A { A(int);}; struct B { explicit B(A); B(const B&);}; B b({0}); Я задал вопрос Разрешение перегрузки дает разные результаты между gcc и clang и @Johannes Schaub - litb объяснили действующие правила. Но у меня остались вопросы по...
190 просмотров

Удален конструктор по умолчанию. Объекты все еще могут быть созданы иногда
Наивный, оптимистичный и о ... так неправильный взгляд на унифицированный синтаксис инициализации С ++ 11 Я думал, что, поскольку объекты пользовательского типа C ++ 11 должны быть созданы с новым синтаксисом {...} вместо старого синтаксиса...
9841 просмотров

Инициализация ссылочного члена в классе С++ 11 делает неверную копию
Вот моя ситуация: У меня есть класс с переменной-членом ссылки const. Я пытаюсь инициализировать эту переменную-член из константной ссылки. Моя проблема заключается в том, что когда переменная-член инициализируется в классе, создается...
116 просмотров
schedule 15.08.2022

Инициализировать частный агрегат из скобочного списка инициализации
Если я попытаюсь скомпилировать class triangle { private: std::array<std::array<double, 2>, 3> m_vertices; }; triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } }; я получаю сообщение об ошибке не может...
80 просмотров
schedule 02.12.2022

Почему инициализация списка позволяет преобразовывать значения типа double в значения с плавающей запятой?
Инициализация списка (синтаксис {...} ) не позволяет сужать преобразования. Например, попытка инициализации списка int i с 3.14f содержит ошибку компиляции, поскольку преобразование значений с плавающей запятой в целые числа сужается:...
386 просмотров
schedule 06.06.2022

Почему реализация make_tuple не возвращается через инициализацию фигурной скобки?
Чтобы понять вопрос, сначала прочитайте этот ответ . Я проверил различные исторические реализации make_tuple (включая версии clang 2012 года). До C++17 я ожидал, что они будут return {list of values ... } , но все они создают кортеж перед его...
399 просмотров

Инициализация списка С# с использованием списка вместо списка инициализации
Моя проблема касается синтаксиса синтаксиса инициализации объекта в C#, в частности синтаксиса для инициализации свойства списка. JSchema библиотеки Newtonsoft .NET Schema предоставляет свойство с именем Enum , которое является...
749 просмотров

Почему {} работает, а () не работает здесь при инициализации атомарного объекта?
Рассмотрим код: #include <atomic> struct stru { int a{}; int b{}; }; int main() { // Doesn't work: std::atomic<stru> as({}); std::atomic<stru> as{{}}; } Сообщение об ошибке, созданное для прямой инициализации,...
143 просмотров

Как инициализировать `std::map‹std::string, CodeInfo›`, используя инициализацию списка?
У меня есть карта с ключом string и значением struct , я не знаю, почему я не могу создать экземпляр объекта с помощью список инициализаторов : #include <string> #include <map> using namespace std; struct CodeInfo { int...
132 просмотров
schedule 02.08.2022

Инициализация списка ссылки: правильно ли 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: //...
207 просмотров

Почему C++ не допускает неявную инициализацию списка в условном операторе?
Этот код компилируется: std::string f(bool a, std::string const& b) { if (a) return b; return {}; } Этот код также компилируется: std::string f(bool a, std::string const& b) { return a ? b : std::string{}; } Этот...
372 просмотров