9
在C++ 11中,我們爲對象提供了很好的統一初始化語法。爲什麼它沒有擴展到初始化非對象類型呢?爲什麼統一初始化語法僅適用於對象?
是否有任何語法歧義,或者它只是我問的一些愚蠢的問題?
實施例:
struct s{ int k;};
s s1{1}; //ok (object initialization)
s const& s3{3}; //ok (object initialization)
s& s2{s1}; //error (reference initialization)
更有用的例子:
struct t{ t(t const& x) : k(x.k){} int k;};
struct c
{
c(t& x1,t& x2)
: s1_{x1} //error (reference initialization)
, s2_{x2} //ok (object initialization)
{}
t& s1_;
t s2_;
};
另一種:
template<class T>
T get()
{
return T{};
}
//ok (object initialization)
get<int>();
//error (void initialization? I do not know terminology for void() token equivalent)
get<void>();
我的猜測是,該語言的設計者決定現有的's1_(x1)'語法已經足夠了。 – dasblinkenlight
@dasblinkenlight它顯然不是(考慮MVP)。 –
你最後的例子是非法的。 'void'是一個不完整的對象類型;沒有辦法創建「void」類型的對象。 – Angew