Pic*_*ent 81 c++ syntax declaration most-vexing-parse
我当然错过了一些东西,但我不明白为什么会编译(同时使用 g++ 和 clang++):
struct A
{
};
struct B
{
};
int main()
{
A a(B);
}
Run Code Online (Sandbox Code Playgroud)
首先,B是一种类型……而不是值。我应该如何解释这段代码?
Bri*_*ian 85
它被解释为一个名为 的函数的声明a,它接受一个类型为 的参数B并返回A。
小智 13
这个问题被称为最令人头疼的解析。该行A a(B);可以解释为一个函数的声明,该函数名为a返回一个类型的对象A并采用一个未命名的类型参数B。
避免此问题的一种方法是使用C++11 中引入的统一初始化语法,其中包括使用大括号而不是括号:A a{B};返回错误。该行现在被解释为一个用 初始化的变量声明B,它是一个类型而不是一个值。
以下是更多信息: