C++结构,新类型之间的区别;和新类型()

标签 c++ struct initialization new-operator

<分区>

例如我在 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/

相关文章:

c - 如何在 C 中的同一个 ADT 中使用多种数据类型?

C++:使用宏字符串将项目转换为动态变量的简单方法?

c++ - 简单的 if 循环无法正常工作

c++ - 调用GetPrinterDataFromPort时CriticalSection崩溃

swift - 在 Swift 中组合相似的结构

c - 让静态函数变量在C中取参数值

C++ Boost 序列化 boost::archive_exception: 输出流错误

c - 如何动态分配包含多个数组的结构体?

iPhone - 我应该如何编写 init 方法?

swift - 'let' 属性不能直接初始化;使用 "self.init(...)"或 "self = ..."代替