这里是一段C ++代码。
在此示例中,许多代码块看起来像构造函数调用。不幸的是,第3块代码不是(您可以使用https://godbolt.org/z/q3rsxn和https://cppinsights.io进行检查)。
我认为,这是一种古老的C ++表示法,它可以解释使用{}(参见#4)引入新的C ++ 11构造表示法的方法。
您是否有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()
;
1
我认为您的所有陈述都是正确的。
—
Arne J
请注意,如果您只是问编译器,编译器将告诉您几乎所有您需要知道的信息:添加
—
Max Langhof
-Wall
并从clang中获取 “ warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]
”,或者从gcc中获得动力较少的“ warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
” 。
@QuentinUK感谢您提供此链接。我了解到有关函数(例如
—
Pascal H.19年
T t()
)的信息,但没有这么简单的声明表达式。当然,这可能很烦人。