C++结构体,new type;和new type()之间的区别

3
例如,在C++中我有一个类似这样的结构体
typedef struct point {
    double x, y;
};

我可以使用
point *p = new point;

或者

point *p = new point();

创建动态点。第二种情况下,x和y隐式初始化为零,有什么区别?为什么第一种情况下不是这样做?
1个回答

4
根据C++标准(11.6 初始值设定项):
11 一个初始化器为空括号集合(即 ())的对象,应当进行值初始化。
这意味着,在该语句中,结构体的标量类型的数据成员将被零初始化。
point *p = new point();

在这种情况下,
point *p = new point;

结构体的成员会默认初始化,也就是说(因为类没有用户自定义的构造函数且数据成员在类定义中没有初始值设定项),它们的值是不确定的。

请注意,您可以按以下方式定义结构体:

typedef struct point {
    double x = 0, y = 0;
};

在这种情况下,上述两个语句的结果将是相同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接