C++ 11'de nesneler için iyi bir biçimsel başlatma sözdizimimiz var. Neden nesne olmayan türlerini de başlatmayı da kapsamaz?Neden tek tip başlatma sözdizimi yalnızca nesneler için uygulanır?
Bunun için sözdizimsel bir belirsizlik var mı, yoksa sadece sorduğum aptalca bir soru mu?
Örnek:
struct s{ int k;};
s s1{1}; //ok (object initialization)
s const& s3{3}; //ok (object initialization)
s& s2{s1}; //error (reference initialization)
daha kullanışlı bir örnek:
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_;
};
Başka bir:
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>();
Tahminimce, dilin tasarımcıları mevcut s1_ (x1) sözdiziminin oldukça yeterli olduğuna karar verdiler. – dasblinkenlight
@dasblinkenlight açıkça açık değil (MVP'yi düşünün). –
Son örneğiniz yasa dışı. 'void' eksik bir nesne türüdür; "void" türünde nesneler oluşturmanın yolu yoktur. – Angew