'value initializing'某事是什么意思?

What does 'value initializing' something mean?

本文关键字:意思 是什么 initializing value      更新时间:2023-10-16

可能重复:
以下短语在C++中是什么意思:零初始化、默认初始化和值初始化?

例如,如果我有一个类:

class Info
{
   int x;
   int y;
};

我用来创建一个对象

Info *p = new Info();

Info旁边的括号是否意味着我正在初始化它?它和这个有什么不同,Info *p = new Info;

我知道在新旧C++语言中有一个区别不同含义的问题,但我想知道默认初始化和值初始化之间的语义差异。例如,值初始化是否意味着将某个东西初始化为零?

声明的变量可以是零初始化值初始化认初始化

在您的示例中:

Info *p = new Info();    <------- Value Initialization
Info *p = new Info;      <------- Default Initialization

C++03标准8.5/5恰当地定义了每一个:

零初始化类型为T的对象意味着:

--如果T是标量类型(3.9),则将对象设置为转换为T的值0(零)
--如果T是非并集类类型,则每个非静态数据成员和每个基类子对象
初始化为零
--如果T是并集类型,则对象的第一个命名数据成员初始化为零
--如果T是数组类型,则每个元素被零初始化
--如果T是引用类型,则不执行初始化。

默认初始化类型为T的对象意味着:
--如果T是非POD类类型(子句9),则调用T的默认构造函数(并且如果T没有可访问的默认构造函数,则初始化是格式错误的)
--如果T是数组类型,则默认初始化每个元素
--否则,对象初始化为零。

值初始化类型为T的对象意味着:
--如果T是具有用户声明构造函数(12.1)的类类型(第9条),则默认调用了T的构造函数(如果T没有可访问的,则初始化格式不正确默认构造函数)
--如果T是一个没有用户声明构造函数的非并集类类型,则每个非静态对T的数据成员和基类组件进行值初始化
--如果T是数组类型,则每个元素都被值初始化
--否则,对象为零初始化