参数构造函数调用

Mah*_*esh 2 c++ constructor

我对此有点疑惑.当默认堆栈分配的对象构造被允许作为其他结构的成员变量时,为什么不参数化构造?请问最让人头疼的解析有什么关系呢?我在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)

错误:在数字常量之前预期','或'...'

IdeOne演示

Ben*_*ell 5

您到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)