Ответ 1
В чем заключается обоснование возможности инициализации скаляров с помощью фигурных скобок?
int
- POD. Таким образом, инициализация скобки допускается в случае int
(и для всех типов встроенных), так как синтаксис инициализации соответствует другим POD.
Кроме того, я думаю, что любое обоснование синтаксиса синтаксиса С++ 11 равно, также (частично) применимо к этому синтаксису, разрешенному С++ 03. Просто С++ 03 не расширил его, включив в него типы не-типа, такие как стандартные контейнеры.
Я вижу одно место, где эта инициализация полезна в С++ 03.
template<typename T>
void f()
{
T obj = { size() } ; //T is POD: built-in type or pod-struct
//code
}
Теперь это можно создать с помощью struct
, который начинается с подходящего элемента, а также любого арифметического типа:
struct header
{
size_t size; //it is the first member
//...
};
f<header>(); //body becomes : header obj = { size(); }; which is fine
f<size_t>(); //body becomes : size_t obj = { size(); }; which is fine
Также обратите внимание, что POD, будь то структурные или встроенные типы, также можно инициализировать равномерно:
header h = header(); //value-initialized
int i = int(); //value-initialized
Поэтому я считаю, что одна из причин - последовательность.