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

Инициализация скаляров фигурными скобками
В C и C ++ можно инициализировать массивы и структуры, используя фигурные скобки: int a[] = {2, 3, 5, 7}; entry e = {"answer", 42}; Однако в выступлении 2007 года Бьярн упоминает, что этот синтаксис также работает для скаляров. Я...
1205 просмотров

Почему автоматическое определение типа и вывод типа шаблона различаются для инициализаторов в фигурных скобках?
Я понимаю, что для инициализатора в скобках auto выведет тип std::initializer_list , в то время как определение типа шаблона не удастся: auto var = { 1, 2, 3 }; // type deduced as std::initializer_list<int> template<class T> void...
1442 просмотров

Проблема с инициализацией объекта из списка инициализаторов
У меня такой код: 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 =...
155 просмотров

При инициализации списка требуется сужающее преобразование
Я читал о сужении конверсии на справочном сайте cpp. Я как бы понял это, но я не понимаю, почему ошибка присутствует только в первой строке. long double ld = 3.1415926536; int a{ld}, b = {ld}; // error: narrowing conversion required...
179 просмотров

Как количество фигурных скобок влияет на равномерную инициализацию?
Рассмотрим следующий фрагмент кода: #include <iostream> struct A { A() {} A(const A&) {} }; struct B { B(const A&) {} }; void f(const A&) { std::cout << "A" << std::endl; } void f(const B&) { std::cout...
929 просмотров

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

C++ — унифицированный инициализатор с std::string
Я пытаюсь использовать универсальный инициализатор со строковым классом С++. Ниже приведен код: #include <iostream> #include <string> using namespace std; int main() { string str1 {"aaaaa"}; string str2 {5, 'a'}; string...
1506 просмотров

Инициализация списка boost::asio::io_context
Я смотрю на пример из boost::beast и вижу, что они инициализируют свой io_context следующим образом: // The io_context is required for all I/O net::io_context ioc{threads}; Думал опечатка, но компилируется. Поэтому я начал гуглить, зная,...
62 просмотров
schedule 24.06.2022

Какие языковые правила позволяют C++11 сделать вывод, что это initializer_list пар?
В С++ 11 кажется допустимым инициализировать std::map<std::string, int> следующим образом: std::map<std::string, int> myMap = { { "One", 1 }, { "Two", 2 }, { "Three", 3 } }; Интуитивно это имеет смысл —...
369 просмотров

Инициализировать агрегат как член класса
В этом коде: #include <array> #include <cstdint> struct K { std::array<char, 4> a; std::uint8_t b; }; const K k1 = { {'T', 'e', 's', 't'}, 1 }; class X { const K k2 = { {'A', 'b', 'c', 'd'}, 2 }; }; Я могу...
134 просмотров
schedule 09.09.2022

Исключение фигурной скобки в std::array‹std::vector›
Я компилирую, используя g++ для С++ 17. У меня есть следующее: std::array<std::vector<int>, 2> v = {{ {1,2}, {3,4} }}; Я не понимаю, почему если я удалю двойные фигурные скобки для массива, он больше не будет работать....
327 просмотров
schedule 30.09.2022

Вложенность Boost.Assignment `map_list_of`
Можно ли изменить эту инициализацию С++ 11: const std::map<int, std::map<int, std::string>> test = {{1, {{1, "bla"}, {2, "blie"} } }, {3, {{1, "ha"}, {2, "hie"} } } }; В какую-то форму с...
2982 просмотров

Можно ли не использовать инициализацию списка для частных членов?
struct A { private: int a, b, c; }; int main() { A a1{}; A a2 = {}; return 0; } Код был скомпилирован VC++ 2012 (с последним обновлением «CTP за ноябрь 2012»). Я ожидаю, что a1 и a2 инициализируются нулем, но это не так. a1...
165 просмотров
schedule 18.04.2023

Агрегатная инициализация структуры с меньшим количеством предложений, почему она инициализирует все?
Если у меня есть общая структура Linux, например: struct sockaddr_in { sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; unsigned char __pad[__SOCK_SIZE__ - sizeof(short int)...
437 просмотров
schedule 14.03.2023

Почему этот конструктор initializer_list является жизнеспособной перегрузкой?
#include <iostream> #include <string> #include <initializer_list> class A { public: A(int, bool) { std::cout << __PRETTY_FUNCTION__ << std::endl; } A(int, double) { std::cout << __PRETTY_FUNCTION__ <<...
297 просмотров

почему эта переменная не выводится как initializer_list в g ++ в C ++ 14?
Рассмотрим следующую программу: #include <iostream> int main() { int n = 3; int fact = 1; for(auto i{1};i<=n;i++) fact*=i; std::cout<<"fact of "<<n<<" is "<<fact; } Он...
623 просмотров
schedule 12.01.2023

Конструктор копирования C++ вызывается вместо initializer_list‹›
На основе этого кода struct Foo { Foo() { cout << "default ctor" << endl; } Foo(std::initializer_list<Foo> ilist) { cout << "initializer list" << endl; } Foo(const Foo&...
993 просмотров

Действительно ли это двусмысленно?
Итак, я знаю, что фигурные скобки в коде могут означать больше, чем просто initializer_list : Что такое список, заключенный в фигурные скобки, если не список инициализаторов? Но что они должны использовать по умолчанию ? Например,...
200 просмотров

Неоднозначный вызов конструктора с инициализацией списка
struct A { A(int) {} }; struct B { B(A) {} }; int main() { B b({0}); } Построение b дает следующие ошибки: In function 'int main()': 24:9: error: call of overloaded 'B(<brace-enclosed initializer list>)' is ambiguous...
1033 просмотров
schedule 10.07.2023

Инициализация члена в перегруженном конструкторе
У меня есть основное семантическое сомнение, которое я не смог прояснить. Прежде чем изложить проблему, я напишу минимальный код, чтобы ясно объяснить ее. В константах.hpp #pragma once enum class OpenglESVersion{ OES1, OES2 }; В...
274 просмотров