use*_*635 18 c++ default-value value-initialization
如果我有一个班级,例如:
class Info
{
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
我曾经创建过一个对象,
Info *p = new Info();
Run Code Online (Sandbox Code Playgroud)
Info旁边的括号是否意味着我正在初始化它?它与此Info *p = new Info;有何不同?
我知道有一个问题可以区分新旧C++语言中的不同含义,但我想知道默认值和值初始化之间的语义差异,例如,值初始化是否意味着将某些内容初始化为零?
Alo*_*ave 30
声明的变量可以是零初始化,值初始化或默认初始化.
在你的例子中:
Info *p = new Info(); <------- Value Initialization
Info *p = new Info; <------- Default Initialization
Run Code Online (Sandbox Code Playgroud)
C++ 03 Standard 8.5/5恰当地定义了每个:
到零初始化的类型T指的对象:
- 如果T是标量类型(3.9),则将对象设置为0(零)转换为T的值;
- 如果T是非联合类类型,则每个非静态数据成员和每个基类子对象
都是零初始化的;
- 如果T是联合类型,则对象的第一个命名数据成员为零初始化;
- 如果T是数组类型,则每个元素都是零初始化的;
- 如果T是引用类型,则不执行初始化.
到缺省初始化类型T的对象是指:
-如果T是一个非POD类型(第9节),T的默认构造函数被调用(并形成不良的初始化如果T没有可访问的缺省的构造);
- 如果T是数组类型,则每个元素都是默认初始化的;
- 否则,对象被零初始化.
到值初始化类型的物体T是指:
-如果T是一个类型(第9节)与用户声明的构造(12.1),然后对T中的默认构造函数被调用(以及初始化是形成不良的如果T没有可访问的默认构造函数);
- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,对象被零初始化
| 归档时间: |
|
| 查看次数: |
8501 次 |
| 最近记录: |