Aquí una pieza de código C ++.
En este ejemplo, muchos bloques de código parecen llamadas de constructor. Desafortunadamente, el código de bloqueo n. ° 3 no lo es (puede verificarlo usando https://godbolt.org/z/q3rsxn y https://cppinsights.io ).
Creo que es una notación antigua de C ++ y podría explicar la introducción de la nueva notación de construcción C ++ 11 usando {} (cf # 4).
¿Tiene una explicación para el T(i)significado, tan cerca de una notación de constructor, pero definitivamente tan diferente?
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: por lo tanto, T(i)(# 3) es equivalente a T i = T();
-Wally obtenga " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]" de clang, o " warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]" un poco menos motivado " de gcc .
T t()), pero no de expresiones de declaración tan simples. Por supuesto, esto podría ser irritante .