Ось фрагмент коду С ++.
У цьому прикладі багато блоків коду виглядають як виклики конструктора. На жаль, блокового коду №3 немає (Ви можете перевірити це за допомогою https://godbolt.org/z/q3rsxn та https://cppinsights.io ).
Я думаю, що це стара позначка C ++, і це могло б пояснити введення нової нотації конструкції C ++ 11 за допомогою {} (пор. №4).
Чи є у вас пояснення T(i)
значення, настільки близьке позначення конструктора, але, безумовно, таке інше?
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)
}
}
Примітка: таким чином, T(i)
(# 3) еквівалентно T i = T()
;
-Wall
і ви отримаєте " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]
" від кланг, або трохи менш мотивований " warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
" від gcc .
T t()
), але не для таких простих виразів декларації. Напевно, це може бути неприємно .