<分区>
例如我在 C++ 中有一个像这样的结构
typedef struct point {
double x, y;
};
我可以用
point *p = new point;
或
point *p = new point();
动态创建一个点。
有什么区别?在第二种情况下,x 和 y 隐式初始化为零。为什么不是第一种情况?
<分区>
例如我在 C++ 中有一个像这样的结构
typedef struct point {
double x, y;
};
我可以用
point *p = new point;
或
point *p = new point();
动态创建一个点。
有什么区别?在第二种情况下,x 和 y 隐式初始化为零。为什么不是第一种情况?
最佳答案
根据 C++ 标准(11.6 初始化器)
11 An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
这意味着标量类型结构的数据成员在该语句中被零初始化
point *p = new point();
在这种情况下
point *p = new point;
结构的成员是默认初始化的(因为类没有用户定义的构造函数并且数据成员在类定义中没有初始化器)具有不确定的值。
注意你可以这样定义结构体
typedef struct point {
double x = 0, y = 0;
};
在这种情况下,上述两个语句的结果将相同。
关于C++结构,新类型之间的区别;和新类型(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57691485/