C++ 调用带括号的默认构造函数与不带括号的对比

标签 c++ default-constructor

<分区>

Possible Duplicate:
different types of initialization in C++

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

Foo afoo;

对比

Foo afoo();

最佳答案

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

new Foo()
new Foo

是否有区别取决于Foo及其成员的类型!

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

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

Foo aFoo = Foo();

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

关于C++ 调用带括号的默认构造函数与不带括号的对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840523/

相关文章:

flutter - 如何在 flutter 中初始化 WebView Controller

c++ - 标签调度对象是否实际实例化?

c++ - 为什么当构造函数引用字符串时无法正确打印?

c++ - auto 推导的那个类型是什么?

c++ - 矮人调试信息缺少构造函数上的数据

C++ 对默认构造函数的 undefined reference

c++ - 为什么成员 `float x` 在 main() 中为对象 `0.` 和 `a` 初始化为 `b`?

c++ - 继承类中的构造函数调用

c++ - 'operator=' 的不明确过载

c++ - 偏序可变参数模板函数 clang