0

可能重复:
带空括号的默认构造函数
实例化带或不带括号的类?

程序:

class Foo
{
   public:
      Foo ( int bar = 1 )
      {
         cout << "bar=" << bar;
      }
};

int main() {

   cout << "0 - ";
   Foo foo_0 ( 0 ) ;
   cout << '\n';

   cout << "1 - ";
   Foo foo_1 ();
   cout << '\n';

   cout << "2 - ";
   Foo foo_4;
   cout << '\n';

   return 0;

}

输出:

0 - bar=0
1 - 
2 - bar=1

问题:为什么示例 #1 不起作用,而示例 #0 和 #2 可以?

4

2 回答 2

7
Foo foo_1 ();

是一个函数声明,没有对象被创建。它是一个foo_1不带参数并返回一个Foo对象的函数。

构造对象的正确方法是

Foo foo1;

这个概念被称为 C++ 的vexing parse。一个简短的描述是,任何可以被视为声明的东西都是。

于 2012-09-10T08:51:25.450 回答
-2

foo_1(); 换句话说,它被称为 Null Intialize,您必须知道对象创建和值初始化之间的区别。

于 2012-09-10T09:15:50.060 回答