关于这个主题有很多问题,但其中许多使用了不准确的术语,而且答案大多是片面的。我将尝试以另一种方式提出这个问题,并希望对这个常见问题给出一个完美的答案。
对于 POD,默认初始化和零初始化之间有什么区别(如果有)?
如果一个POD成员变量没有在构造函数初始化列表中初始化,这种情况下会是:
上面问题 2 的答案是否取决于类的实例是使用运算符在堆栈上还是在堆上创建new
的
对于 C++98、C++11 或 C++14,上述问题的答案是否不同?
在默认初始化中,基本“C”样式类型(int、double、char、bool 等)具有不确定的值。也就是说,不存在未定义的行为,但值可以是任何值。
如果 POD 成员未在构造函数中初始化,也未通过 C++11 类内初始化进行初始化,则它是默认初始化的。
无论堆栈还是堆,答案都是相同的。
在 C++98 中(而不是之后),new int()
被指定为执行零初始化。
参考: http: //en.cppreference.com/w/cpp/language/default_initialization
归档时间: |
|
查看次数: |
247 次 |
最近记录: |