如果我有这样的代码
class Node {
public:
Node *subnodes[10];
};
Node x = Node();在该代码运行该x->subnodes[0] == nullptr之后,是否保证
我不是C++的专家,我觉得C++规范令人望而生畏。这在实践中是可行的,但是规范是否保证将nullptr放在数组的每个元素中(例如,相对于潜在的垃圾)?到目前为止,我还没有找到权威的规范语言来说服自己,在野外,我看到很多代码的例子似乎不相信这是真的。所以,经过一段时间没有想出答案之后,我转向你,stackoverflow.提前谢谢。
发布于 2020-06-25 01:28:41
是的,是有保证的。
Node()构造一个临时对象并执行值初始化。结果,成员数组subnodes的所有元素都是零初始化作为空指针。x是从临时对象复制初始化的,其成员也得到相同的初始化结果。(因为复制省略 x可能是直接初始化值的,所以结果不会改变。)
如果T是一个类类型,它的默认构造函数既不是用户提供的,也不是删除的(也就是说,它可以是一个具有隐式定义的或默认的默认构造函数的类),那么对象是零初始化,如果它有一个非平凡的默认构造函数,那么它就是默认初始化;
和
零初始化的影响是:
BTW:对于类似于默认初始化的Node x;,成员数组的元素将被初始化为不确定值。
发布于 2020-06-25 02:38:08
虽然它可以保证将其变为nullptr,但我不建议依赖c++中的默认intializing。有时候,默认的非齐化会做一些奇怪的事情,例如,如果你没有将一个整数不化,它就用下一个可用的内存地址将它不成正数,这是没有意义的。
https://stackoverflow.com/questions/62566438
复制相似问题