首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中,指针类型数组的元素在默认情况下是否保证初始化为nullptr?

在C++中,指针类型数组的元素在默认情况下是否保证初始化为nullptr?
EN

Stack Overflow用户
提问于 2020-06-25 01:23:33
回答 2查看 127关注 0票数 6

如果我有这样的代码

代码语言:javascript
复制
class Node {
public:
    Node *subnodes[10];
};
Node x = Node();

在该代码运行该x->subnodes[0] == nullptr之后,是否保证

我不是C++的专家,我觉得C++规范令人望而生畏。这在实践中是可行的,但是规范是否保证将nullptr放在数组的每个元素中(例如,相对于潜在的垃圾)?到目前为止,我还没有找到权威的规范语言来说服自己,在野外,我看到很多代码的例子似乎不相信这是真的。所以,经过一段时间没有想出答案之后,我转向你,stackoverflow.提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-25 01:28:41

是的,是有保证的。

Node()构造一个临时对象并执行值初始化。结果,成员数组subnodes的所有元素都是零初始化作为空指针。x是从临时对象复制初始化的,其成员也得到相同的初始化结果。(因为复制省略 x可能是直接初始化值的,所以结果不会改变。)

如果T是一个类类型,它的默认构造函数既不是用户提供的,也不是删除的(也就是说,它可以是一个具有隐式定义的或默认的默认构造函数的类),那么对象是零初始化,如果它有一个非平凡的默认构造函数,那么它就是默认初始化

零初始化的影响是:

  • 如果T是标量类型,则对象的初始值是显式转换为T的积分常数零。
  • 如果T是一个非并类类型,那么所有基类和非静态数据成员都是零初始化的,并且所有填充被初始化为零位。如果有的话,构造函数将被忽略。
  • ..。
  • 如果T是数组类型,则每个元素都是零初始化的.
  • ..。

BTW:对于类似于默认初始化Node x;,成员数组的元素将被初始化为不确定值。

票数 4
EN

Stack Overflow用户

发布于 2020-06-25 02:38:08

虽然它可以保证将其变为nullptr,但我不建议依赖c++中的默认intializing。有时候,默认的非齐化会做一些奇怪的事情,例如,如果你没有将一个整数不化,它就用下一个可用的内存地址将它不成正数,这是没有意义的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62566438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档