Nav*_*een 26 c++ arrays constructor initialization
在尝试回答这个问题时,我发现代码int* p = new int[10]();编译好VC9编译器并将整数初始化为0.所以我的问题是:
new int;还是new int();?后者是否保证初始化变量?Dav*_*eas 29
首先是这个有效的C++还是微软的扩展?
它在C++中有效,标准的相关部分是5.3.4,第一段包含语法
是否可以保证初始化数组的所有元素?
是.第5.3.4/15段指出
创建类型为T的对象的new-expression初始化该对象,如下所示:
...
- 如果new-initializer的格式为(),则该项是值初始化的(8.5)
其中为POD初始化的值意味着零初始化.
另外,如果我做新的int,是否有任何区别; 或者新的int();?后者是否保证初始化变量?
是的他们是不同的.根据上面的引用new int()将零初始化整数.在同一段的前一个块中:
如果省略new-initializer:
如果T是(可能是cv限定的)非POD类类型(或其数组),则对象是默认初始化的(8.5).如果T是const限定类型,则基础类类型应具有用户声明的默认构造函数.
否则,创建的对象具有不确定的值.如果T是const限定类型,或者包含(直接或间接)const限定类型成员的(可能是cv限定的)POD类类型(或其数组),则该程序是不正确的;
所以new int不会初始化内存.
| 归档时间: |
|
| 查看次数: |
4509 次 |
| 最近记录: |