Voici un morceau de code C ++.
Dans cet exemple, de nombreux blocs de code ressemblent à des appels de constructeur. Malheureusement, le code de blocage # 3 ne l'est pas (vous pouvez le vérifier en utilisant https://godbolt.org/z/q3rsxn et https://cppinsights.io ).
Je pense que c'est une ancienne notation C ++ et cela pourrait expliquer l'introduction de la nouvelle notation de construction C ++ 11 en utilisant {} (cf # 4).
Avez-vous une explication du T(i)
sens, si proche d'une notation constructeur, mais certainement si différente?
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: ainsi T(i)
(# 3) est équivalent à T i = T()
;
-Wall
et vous obtenez " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]
" de clang, ou le "moins motivé warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
" de gcc .
T t()
) mais pas des expressions de déclaration si simples. Pour sûr, cela pourrait être vexant .