C ++使用parens vs没有parens调用默认构造函数

时间:2012-01-12 18:43:23

标签: c++ default-constructor

  

可能重复:
  different types of initialization in C++

调用基础构造函数(如

)之间是否存在任何差异
Foo afoo;

VS

Foo afoo();

1 个答案:

答案 0 :(得分:2)

是:第一个是变量定义,第二个是函数声明。现在让我们讨论一下这两个表达式之间差异的更有趣的问题:

new Foo()
new Foo

是否存在差异取决于Foo及其成员的类型!

  • 如果Foo有明确的默认构造函数,则两者是相同的
  • 如果没有默认构造函数,则可能存在差异!如果有任何聚合或内置类型的成员,它将在第一个表达式中初始化,但不会在第二个表达式中初始化,除非所有具有默认构造的成员都将默认构造。

请注意,这也适用于类的成员。对于变量,您不能使用括号使用表单,即为了确保对象已初始化,您需要使用

Foo aFoo = Foo();

如果没有明确的构造函数接受参数或您不知道(例如在模板代码中)。