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

0 ответов

Конвертирующий конструктор не принимает список в скобках

Поэтому, пока я возился с конструкторами, я сделал этот код: class super { public: int duper, duperer; friend ostream& operator << (ostream&, super&); friend super operator+ (super& uno, super& dos); friend int main(); supe…
11 май '18 в 23:40
1 ответ

Проблема с инициализацией объекта из списка инициализаторов

У меня есть следующий код: class A { public: A(std::vector<std::shared_ptr<int>>){} }; auto x = std::make_shared<int>(0); auto y = std::make_shared<int>(1); auto list = {x, y}; auto res = std::make_shared<A>({x, y}); В …
3 ответа

Зачем им специальные списки инициализаторов, а не обрабатывать их одинаково?

Скажи у меня есть переменная auto x что я хочу инициализировать в 7 используя инициализацию скобок, просто: auto x {7}; За исключением того, что я узнал, что x - это не целое число, а сам список инициализации. Зачем? Есть ли конкретная причина, поче…
15 май '13 в 17:48
0 ответов

Как передать braced-init-list в конструктор `std::array`?

Можно ли передать точный список braced-init-list std::arrayконструктор? Это может быть необходимо, так как std::array не поддерживает присвоение списка инициализаторов. Попытка адаптировать принятый ответ на этот вопрос: Как создать объект std:: arr…
1 ответ

Объектная буквальная альтернатива в C++

Я исхожу из языка, похожего на Javascript, где я могу создавать такие функции. function tween(obj, tweenParams, time, tweenOptions); Это используется как: tween(mySprite, {x: 10, y: 10}, 1, {startDelay: 1, loops: 5}); Если неясно, это приводит к том…
2 ответа

Несовместимость инициализации Visual C++ с gcc и clang

Следующий кусок кода печатает 0 скомпилирован с vC++ и печатает 1 скомпилировано с g++ или clang++ : #include <iostream> #include <vector> struct S { S() = default; std::vector<int> v{0}; }; int main() { std::vector<S> s{{}};…
1 ответ

Инициализировать частный агрегат из списка фигурных скобок

Если я попытаюсь скомпилировать class triangle { private: std::array<std::array<double, 2>, 3> m_vertices; }; triangle const unit_triangle{ { { { 0, 0 }, { 1, 0 }, { 0, 1 } } } }; Я получаю сообщение об ошибке невозможно преобразовать из…
21 мар '17 в 20:15
1 ответ

Многомерный список инициализаторов в скобках

То, что я хочу, - это возможность генерировать матрицу 5x5 через заключенный в скобки список инициализаторов. Так что это может выглядеть позже так: enum class MyListType { EMPTY, A }; auto matrix = { {MyListType::EMPTY, MyListType::EMPTY, MyListTyp…
29 авг '15 в 14:38
2 ответа

Как я должен инициализировать скобками std:: массив std:: пар?

std::array<std::pair<int, int>, 2> ids = { { 0, 1 }, { 1, 2 } }; Ошибка VS2013: ошибка C2440: 'initializing': невозможно преобразовать из 'int' в 'std::pair' Ни один конструктор не может принять тип источника, или разрешение перегрузки к…
1 ответ

Тонкости инициализации скобки

При попытке использовать инициализацию скобок, тонкость, которую можно найти, заключается в использовании std::vector, как показано в следующем примере: #include <iostream> #include <string> #include <vector> using namespace std; t…
01 мар '14 в 23:03
1 ответ

Инициализация вложенного списка не соответствует конструктору, принимающему initializer_list в качестве второго аргумента

Я разрабатываю структуру данных, способную описать семантику некоторых файлов XML в C++. Идея заключается в проверке наличия и / или правильной последовательности различных элементов при сохранении текста, который они содержат, в объект QHash с иден…
2 ответа

Почему передача инициализированного скобкой временного по адресу требует явного приведения к тому же типу в MSVS

Я пытался сделать свой код менее раздутым при работе с Windows API, заменив двухлинейные TEMP t{0,1,2}; // let's say it's struct TEMP {int a; int b; int c} SomeVeryVerboseFunctionName(&t); с однострочником SomeVeryVerboseFunctionName(&TEMP{0…
1 ответ

Почему GCC 6.3 компилирует этот код Braced-Init-List без явной поддержки C++11?

У меня есть вопрос о различных значениях списка в фигурных скобках. Я знаю, что C++03 не поддерживает C++11 initializer_list, Тем не менее, даже без -std=c++11 флаг компилятора, gcc 6.3 будет правильно инициализирован interpolate с этим кодом: map&l…
1 ответ

Почему реализация make_tuple не возвращается через инициализацию фигурной скобки?

Чтобы понять вопрос, сначала прочтите этот ответ. Я проверил разные исторические make_tuple реализации (в том числе Clang версии 2012 года). До C++17 я бы ожидал, что они return {list of values ... } но все они создают кортеж, прежде чем возвращать …
31 янв '18 в 01:25
1 ответ

Пользовательский инициализатор скобок

Допустим, у меня есть эта структура: struct MyStruct { int field1; char *field2; MyStruct(int a, char* b): field2(b) { field1 = doStuff(a); } MyStruct(int a): MyStruct(a, nullptr) {} ~MyStruct(); } Насколько я знаю, это не агрегат, поскольку у меня …
1 ответ

Ошибка автоматического вывода типа с инициализацией фигурной скобки при вызове функции с unique_ptr

Учитывая приведенный ниже код, в чем разница между unique_ptr и Bar, которые сделали bar ( { new int } ); хорошо но не foo( { new int } ); #include <memory> struct Bar { Bar() = default; Bar( int* m ) : m_( m ) {}; ~Bar() { if ( m_ ) delete m_…
28 янв '14 в 12:33
2 ответа

Как предотвратить использование std::string конструктором initializer_list?

Я хочу, чтобы следующий код выводил "test" вместо "X" для случая при использовании std::string используя ту же инициализацию, что и другие основные типы. std::string теперь вызывает конструктор с initializer_list и, следовательно, специализация шабл…
1 ответ

Как мне инициализировать объект std:: array<std:: array <T, 2>, 2>?

Я пытаюсь инициализировать объекты типа вещь: template&lt;typename T&gt; struct thing : std::array&lt;std::array&lt;T, 2&gt;, 2&gt; { }; thing&lt;int&gt; t1 {{ {1,2}, {3,4} }}; Я получил: error: no matching function for call to ‘thing&lt;int&gt;::th…
25 июл '14 в 14:30
1 ответ

Гарантирует ли инициализация класса скобками, что все члены инициализируются по умолчанию?

В следующем примере выполняется инициализация Vec3 с фигурными скобками гарантируют, что все x, y, а также z инициализировать по умолчанию (func_a()), в отличии от func_b() где все члены получают неопределенные значения? struct Vec2 { float x, y; };…
2 ответа

Альтернатива инициализации скобки в g++ 4.4

Я хочу инициализировать этот вектор-вектор-строки следующим образом, компилируя с g++ 4.4.7 (из-за политики операций я не могу использовать более новую версию). vector&lt;vector&lt;string&gt;&gt; phs2tm_vec { { "manager_n", "manager_a", "manager_e",…
12 сен '13 в 22:08