【问题标题】:C++ Creating an instance of a class? [duplicate]C++ 创建一个类的实例? [复制]
【发布时间】:2012-09-10 08:50:56
【问题描述】:

可能重复:
Default constructor with empty brackets
Instantiate class with or without parentheses?

程序:

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 可以?

【问题讨论】:

    标签: c++ class constructor instance default-parameters


    【解决方案1】:
    Foo foo_1 ();
    

    是一个函数声明,没有创建对象。这是一个名为foo_1 的函数,它不接受任何参数并返回一个Foo 对象。

    构造对象的正确方法是

    Foo foo1;
    

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

    【讨论】:

    • 谢谢!像往常一样全面回答!
    • 顺便说一句,例子#0 也是正确的,对吧?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多