【问题标题】:C++ structs, difference between new type; and new type() [duplicate]C++结构,新类型的区别;和新类型()[重复]
【发布时间】:2020-01-01 15:03:01
【问题描述】:
例如,我在 C++ 中有一个类似的结构
typedef struct point {
double x, y;
};
我可以使用
point *p = new point;
或
point *p = new point();
动态创建一个点。
有什么区别?在第二种情况下,x 和 y 被隐式初始化为零。为什么不是第一种情况?
【问题讨论】:
标签:
c++
struct
initialization
new-operator
【解决方案1】:
根据 C++ 标准(11.6 初始化程序)
11 一个对象,其初始值设定项是一组空括号,即
(),应进行值初始化。
表示标量类型结构的数据成员在该语句中初始化为零
point *p = new point();
在这种情况下
point *p = new point;
结构的成员是默认初始化的,即(因为类没有用户定义的构造函数,并且数据成员在类定义中没有初始化器)具有不确定的值。
请注意,您可以通过以下方式定义结构
typedef struct point {
double x = 0, y = 0;
};
在这种情况下,上述两个语句的结果将是相同的。