中括弧を使用してスカラーの初期化を許可する理由は何ですか?
int
ポッドです。そのため、中括弧の初期化はint
、初期化構文を他の POD と一致させるため、(およびすべての組み込み型に対して) 許可されます。
また、C++11 Uniform Initialization Syntax の背後にある理論的根拠が何であれ、C++03 で許可されているこの構文にも (部分的に) 適用できると思います。C++03 がこれを拡張して、標準コンテナーなどのポッド以外のタイプを含めなかっただけです。
この初期化が C++03 で役立つ場所が 1 つあります。
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
その理由の 1 つは一貫性だと思います。