Qui un pezzo di codice C ++.
In questo esempio, molti blocchi di codice sembrano chiamate del costruttore. Sfortunatamente, il codice di blocco n. 3 non lo è (puoi verificarlo usando https://godbolt.org/z/q3rsxn e https://cppinsights.io ).
Penso che sia una vecchia notazione C ++ e potrebbe spiegare l'introduzione della nuova notazione di costruzione C ++ 11 usando {} (cfr. N. 4).
Hai una spiegazione del T(i)
significato, così vicina a una notazione del costruttore, ma decisamente così diversa?
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: quindi, T(i)
(# 3) è equivalente a T i = T()
;
-Wall
e ottieni " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]
" da clang, o il " warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
" leggermente meno motivato " da gcc .
T t()
) Ma non per espressioni di dichiarazione così semplici. Di sicuro, questo potrebbe essere irritante .