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();
-Wallet 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 .