我对此有点疑惑.当默认堆栈分配的对象构造被允许作为其他结构的成员变量时,为什么不参数化构造?请问最让人头疼的解析有什么关系呢?我在ideone上尝试了C++ 0X并获得了相同的结果.
struct foo{
foo() {}
foo(int i) {}
};
struct bar{
foo obj; // Allowed
foo obj2(10); // Not Allowed
};
Run Code Online (Sandbox Code Playgroud)
错误:在数字常量之前预期','或'...'
您到Most Vexing Parse的链接讨论了非成员变量的实例化(不是类/结构的成员的变量).您展示的示例是在结构中声明的成员变量; 您通常会在构造函数中初始化它们
struct bar
{
foo obj;
foo obj2;
bar() : obj2(10) {}
};
Run Code Online (Sandbox Code Playgroud)
最令人烦恼的解析问题出现在以下情况中:
struct baz
{
baz(int n) {}
};
void foo()
{
baz meow(int());
}
Run Code Online (Sandbox Code Playgroud)
由于链接中描述的"最令人头疼的解析"问题,标识符meow似乎是类型的函数声明baz (int).(乍一看似乎是默认初始化的int()实际上只是数据类型int)