可能的重复:
以下短语在 C++ 中意味着什么:零初始化、默认初始化和值初始化? https://stackoverflow.com/questions/1613341/what-do-the-following-phrases-mean-in-c-zero-default-and-value-initializat
例如,如果我有一堂课:
class Info
{
int x;
int y;
};
我用它来创建一个对象,
Info *p = new Info();
Info 旁边的括号是否意味着我值得初始化它?和这个有什么不同Info *p = new Info;
?
我知道有一个question https://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new/620402#620402它区分新旧 C++ 语言中的不同含义,但我想知道默认值初始化和值初始化之间的语义差异,例如值初始化是否意味着将某些内容初始化为零?
声明的变量可以是零初始化, 值初始化 or 默认初始化.
在你的例子中:
Info *p = new Info(); <------- Value Initialization
Info *p = new Info; <------- Default Initialization
C++03 标准 8.5/5 恰当地定义了以下各项:
To 零初始化T 类型的对象意味着:
— 如果 T 是标量类型 (3.9),则将对象设置为转换为 T 的 0(零)值;
— 如果 T 是非联合类类型,则每个非静态数据成员和每个基类子对象
是零初始化的;
— 如果 T 是联合类型,则对象的第一个命名数据成员为零初始化;
— 如果 T 是数组类型,则每个元素均初始化为零;
— 如果 T 是引用类型,则不执行初始化。
To 默认初始化T 类型的对象意味着:
— 如果 T 是非 POD 类类型(第 9 条),则调用 T 的默认构造函数(并且
如果 T 没有可访问的默认构造函数,则初始化是错误的);
— 如果 T 是数组类型,则每个元素都默认初始化;
— 否则,该对象将被零初始化。
To 值初始化T 类型的对象意味着:
— 如果 T 是具有用户声明的构造函数 (12.1) 的类类型(第 9 条),则默认值
调用 T 的构造函数(如果 T 没有可访问的,则初始化是错误的
默认构造函数);
— 如果 T 是没有用户声明的构造函数的非联合类类型,则每个非静态
T 的数据成员和基类组件已进行值初始化;
— 如果 T 是数组类型,则每个元素都是值初始化的;
— 否则,该对象被零初始化
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)