Описание тега 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 …
0 ответов

Равномерная инициализация и std::initializer_list

Я изучаю C++ и дошел до того, что читаю об инициализации списка. После некоторой путаницы, из-за перекрытия синтаксиса, я понял, что равномерная инициализация и инициализация списка действительно две разные (хотя я только что сказал, перекрытия) нов…
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*, право?
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…
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}; Можно ли использовать запятую, чтобы комп…
2 ответа

Как "уменьшить типизацию для создания типов C++" с помощью Uniform Initializer?

Я много играл в новую униформу инициализации с {}, Как это: vector<int> x = {1,2,3,4}; map<int,string> getMap() { return { {1,"hello"}, {2,"you"} }; } Бесспорно, что эта инициализация может измениться программирует C++. Но мне интересно,…
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>>…
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: …
2 ответа

Единая инициализация в коде шаблона

Насколько я понимаю, равномерная инициализация является предпочтительным синтаксисом для инициализации объектов. Херб Саттер пишет Во-первых, это называется "равномерная инициализация", потому что она, ну, в общем, одинаковая - одинакова для всех ти…
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} {}…
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…