Di sini sepotong kode C ++.
Dalam contoh ini, banyak blok kode terlihat seperti panggilan konstruktor. Sayangnya, kode blok 3 tidak (Anda dapat memeriksanya menggunakan https://godbolt.org/z/q3rsxn dan https://cppinsights.io ).
Saya pikir, ini adalah notasi C ++ lama dan bisa menjelaskan pengenalan notasi konstruksi C ++ 11 baru menggunakan {} (cf # 4).
Apakah Anda memiliki penjelasan untuk T(i)makna, sangat dekat dengan notasi konstruktor, tetapi jelas sangat berbeda?
struct T {
T() { }
T(int i) { }
};
int main() {
int i = 42;
{ // #1
T t(i); // new T named t using int ctor
}
{ // #2
T t = T(i); // new T named t using int ctor
}
{ // #3
T(i); // new T named i using default ctor
}
{ // #4
T{i}; // new T using int ctor (unnamed result)
}
{ // #5
T(2); // new T using int ctor (unnamed result)
}
}
NB: dengan demikian, T(i)(# 3) setara dengan T i = T();
-Walldan Anda mendapat " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]" dari dentang, atau " warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]" yang sedikit kurang termotivasi dari gcc .
T t()) tetapi tidak untuk ekspresi deklarasi yang begitu sederhana. Yang pasti, ini bisa menjengkelkan .