【问题标题】:C++ class initialization with and without parentheses [duplicate]带和不带括号的C++类初始化[重复]
【发布时间】:2013-03-05 14:42:12
【问题描述】:

下面2个两次初始化有什么区别?

class Pod {
public:
    int a, b;
};

Pod *p1 = new Pod;
Pod *p2 = new Pod();

【问题讨论】:

  • 正如 JamesMcLaughlin 所说,没有区别,而且不仅限于 POD。
  • @DavidRodríguez-dribeas 怎么样?
  • @JamesMcLaughlin:阅读标准中的第 8.5 节 :)
  • @DavidRodríguez-dribeas 是的,看来我错了!谢谢。
  • 上一个线程解释了零、默认和值初始化,并有示例stackoverflow.com/questions/1613341/…

标签: c++ initialization


【解决方案1】:

在第一种情况下,对象未初始化,而在第二种情况下,对象保证为值初始化,在这种情况下,类型为 POD 意味着 零-初始化

【讨论】:

  • 虽然int 的情况基本上不存在差异,但在第一种情况下,成员是默认初始化而不是未初始化的。
  • @JerryCoffin:是的,我应该更清楚一点,那部分也是因为它是一个 POD,对于它 default-initialization 意味着对象是 未初始化
  • @DavidRodríguez-dribeas: ...但在 C++11 中,它也不限于 POD 类型(IIRC,它应该适用于所有可复制类型的更广泛的类别)。跨度>
  • @JerryCoffin:普通可复制类型?不知道这在这里有什么关系(任何地方都没有副本),我在 n3777 中找不到支持它的参考。对于 value-initialization,区别在于具有/不具有用户提供的默认构造函数的类类型。对于类类型的default-initialization,它意味着调用默认构造函数,如果隐式定义,它将递归地导致成员的default-initialization...在基本类型未初始化
  • @DavidRodríguez-dribeas:复制并不真正相关,但与 POD 相比,可简单复制是一个更宽松的要求,您不必满足成为 POD 的额外要求即可默认初始化表示未初始化。
猜你喜欢
  • 2014-02-04
  • 2018-12-12
  • 2019-08-04
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多