<分区>
让我们假设下面的类 Foo。
struct Foo
{
int i;
};
如果我想创建这个类的一个实例并初始化它,我应该这样做:Foo foo1 = Foo();
调用构造函数。
int main(void)
{
foo1 = Foo();
cout << foo1.i << " : " << foo1.j << endl; // " 0 "
}
然后我想我会用以下行调用默认构造函数,但它没有:
int main(void)
{
Foo foo2(); // most vexing parse
cout << foo2 << endl; // " 1 " ??? why?
foo2.i++; // error: request for member ‘i’ in ‘foo2’, which is of non-class type ‘Foo()’
}
为什么 foo2 被初始化为 int(1) 而不是 Foo()?
我知道最令人烦恼的解析,它告诉我,根据我的理解,当一行可以被解释为一个函数时,它被解释为一个函数。
但是 foo1() 被解释为一个 int,而不是一个函数,也不是一个 Foo 类。
Foo foo2() 行编译因为它被解释为函数原型(prototype)。好的。
为什么这一行可以编译? cout << foo2 << endl;
它是否打印 foo2 函数的地址?