Aqui está um pedaço de código C ++.
Neste exemplo, muitos blocos de código parecem chamadas de construtor. Infelizmente, o código de bloco nº 3 não é (você pode verificá-lo usando https://godbolt.org/z/q3rsxn e https://cppinsights.io ).
Eu acho que é uma notação antiga do C ++ e poderia explicar a introdução da nova notação de construção do C ++ 11 usando {} (cf # 4).
Você tem uma explicação para o T(i)
significado, tão próxima de uma notação de construtor, mas definitivamente tão 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: assim, T(i)
(# 3) é equivalente a T i = T()
;
-Wall
e você recebe " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]
"do clang, ou o" warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
" menos motivado" " do gcc .
T t()
), mas não para expressões de declaração tão simples. Com certeza, isso pode ser irritante .