Описание тега uniform-initialization
Функция C++11, которая позволяет использовать фигурные скобки для инициализации любого типа переменной в любом контексте.
2
ответа
Почему синтаксис двойных фигурных скобок не предпочтителен для конструкторов, принимающих std::initializer_list
Равномерная инициализация является важной и полезной функцией C++11. Тем не менее, вы не можете просто использовать {} с тех пор std::vector<int> a(10, 0); // 10 elements of value zero std::vector<int> b({10, 0}); // 2 elements of value …
19 мар '14 в 09:29
0
ответов
Равномерная инициализация и std::initializer_list
Я изучаю C++ и дошел до того, что читаю об инициализации списка. После некоторой путаницы, из-за перекрытия синтаксиса, я понял, что равномерная инициализация и инициализация списка действительно две разные (хотя я только что сказал, перекрытия) нов…
16 сен '15 в 09:23
1
ответ
Авто с равномерной инициализацией расширяется до неожиданного типа
Рассмотрим эту короткую программу, скомпилированную с GCC 4.7.2 g++ -std=c++11 test.cc #include <memory> #include <queue> struct type{ type(int a) : v(a) {} int v; }; typedef std::shared_ptr<type> type_ptr; int main(){ int value = …
09 июл '13 в 14:47
1
ответ
Почему работает std::string{"const char ptr"}?
Я вижу, что std::string имеет только один CTOR с initializer_list: string (initializer_list<char> il); Так что список инициализатора должен работать с символами, верно? Зачем std::string{"some_str"} работает, он получает const char*, право?
23 окт '15 в 08:52
2
ответа
В C++11, вы всегда можете (безопасно) заменить инициализацию memset() пустым инициализатором?
Я часто сталкиваюсь с POD-структурами в коде, которые вручную инициализируются нулями memset вот так: struct foo; memset(&foo, 0, sizeof(foo)); Я проверил стандарт C++11 и он говорит: "Объект, инициализатор которого представляет собой пустой наб…
17 авг '13 в 02:30
1
ответ
Единый синтаксис инициализации для основных типов?
const int number{42}; Это правильный синтаксис? Я могу найти только примеры, когда инициализаторы с фигурными скобками используются для объектов или нетривиальных типов.
15 авг '14 в 15:23
2
ответа
Почему 'A a{};' компилировать, когда конструктор по умолчанию A::A() удален?
Вот пример кода в вопросе: struct A { A() = delete; }; int main() { // A a(); // compiles, since it's a function declaration (most vexing parse) // A a; // does not compile, just as expected A a{}; // compiles, why? The default constructor is delete…
27 июл '18 в 11:00
1
ответ
C++14 равномерная инициализация на неагрегате
Я использую Visual C++ 2013. Когда класс является агрегатом, он инициализируется нулями. Когда он не агрегатный, он инициализируется по умолчанию и остается неопределенным. Это почему? #include <iostream> using namespace std; class Test_1 { pu…
08 фев '15 в 07:50
2
ответа
Завершающая запятая в равномерной инициализации
Есть ли потенциальная семантическая разница, когда я использую запятую во время равномерной инициализации? std::vector< std::size_t > v1{5, }; // allowed syntax std::vector< std::size_t > v2{10}; Можно ли использовать запятую, чтобы комп…
06 сен '17 в 08:54
2
ответа
Как "уменьшить типизацию для создания типов C++" с помощью Uniform Initializer?
Я много играл в новую униформу инициализации с {}, Как это: vector<int> x = {1,2,3,4}; map<int,string> getMap() { return { {1,"hello"}, {2,"you"} }; } Бесспорно, что эта инициализация может измениться программирует C++. Но мне интересно,…
16 сен '11 в 14:51
2
ответа
Как унифицировать инициализацию карты unique_ptr?
У меня есть этот код для инициализации карты в в unique_ptr. auto a = unique_ptr<A>(new A()); map<int, unique_ptr<A>> m; m[1] = move(a); Могу ли я использовать форму для инициализации? Я старался map<int, unique_ptr<A>>…
18 июн '13 в 23:30
1
ответ
Унифицированный инициализатор, используемый в аргументе по умолчанию для константной ссылки
Это законный синтаксис C++0x? class A { public: void some_function( const std::set<std::string> &options = {} ); // note that this is legal, which binds the const reference to a temporary: void some_function( const std::set<std::string&…
07 июл '11 в 19:13
2
ответа
Класс с массивом объектов std:: без конструкторов по умолчанию
Итак, давайте предположим, что у меня есть следующий класс class NoDefaultConstructor { NoDefaultConstructor() = delete; ... }; И у меня есть другой класс, который имеет массив типа NoDefaultConstructor и другие участники class Wrapper { std::array&…
07 июл '16 в 20:51
1
ответ
Действительно ли возвращаемая единая инициализированная ссылка действительна
Этот пример кода действителен? using ref = char&; ref foo(ref x) { return ref{x}; } int main() { char a; foo(a); return 0; } Кажется, что: лязг 3.5 говорит ДА gcc 4.9 говорит НЕТ main.cpp: In function 'char& foo(ref)': main.cpp:4:15: error: …
28 янв '15 в 17:59
2
ответа
Единая инициализация в коде шаблона
Насколько я понимаю, равномерная инициализация является предпочтительным синтаксисом для инициализации объектов. Херб Саттер пишет Во-первых, это называется "равномерная инициализация", потому что она, ну, в общем, одинаковая - одинакова для всех ти…
22 мар '16 в 10:33
1
ответ
Унифицированный синтаксис инициализации в C++11
Вопрос об "унифицированном синтаксисе инициализации" в C++11. Законно ли инициализировать структуру следующим синтаксисом в C++11 (посмотрите на строки #128-137)? Или POD все еще актуален? http://pastebin.com/GMZ5QDmR Проблема с компилятором MSVC 20…
29 июл '14 в 09:25
1
ответ
Построить контейнер со списком инициализаторов итераторов
Можно построить вектор с диапазоном итераторов, например так: std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin}, std::istream_iterator<std::string>{}); Но я также могу скомпилировать и запустить код, использ…
31 июл '13 в 20:03
1
ответ
Ошибка "Избыточные элементы в struct initializer" с равномерной инициализацией C++11
Я удивлен следующей ошибкой компилятора: template <typename T> struct A { A(T t): t_{t} {} T t_; }; struct S { }; int main() { A<S> s{S{}}; } Ошибка (с лязгом): test.cpp:4:16: error: excess elements in struct initializer A(T t): t_{t} {}…
20 фев '13 в 22:08
2
ответа
Обязательно ли иметь конструктор по умолчанию для использования унифицированной инициализации в C++
В приведенном ниже коде я получил сообщение об ошибке "нет конструктора по умолчанию" . Поэтому я не могу использовать единый инициализатор. Когда я сделал конструктор по умолчанию, я получил ошибку в отношении фигурных скобок. Просьба выделить проб…
29 мар '14 в 19:55
0
ответов
C++14: Почему я не могу использовать фигурные скобки для `void`?
Довольно часто (по крайней мере, в моем коде) использовать decltype а также std::enable_if_t иметь простой и эффективный выбор SFINAE. Что-то вроде следующего: template <typename A1, typename A2, typename... Auts> inline auto infiltration(cons…
18 мар '15 в 17:06