2

可能重复:
C++ 中不同类型的初始化

调用基本构造函数之间有什么区别吗

Foo afoo;

对比

Foo afoo();
4

1 回答 1

2

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

new Foo()
new Foo

是否有差异取决于其类型Foo及其成员!

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

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

Foo aFoo = Foo();

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

于 2012-01-12T18:54:19.423 回答