new的初始化
来源:互联网 发布:女性就业歧视数据 编辑:程序博客网 时间:2024/06/05 21:04
有如下C++代码:
int* buffer = new int[512];
在默认情况下,new
是不会对分配的int
进行初始化的。要想使分配的int
初始化为0,需要显式地调用其初始化函数:
int* buffer = new int(); // 分配的一个int初始化为0int* buffer = new int(0); // 分配的一个int初始化为0int* buffer = new int[512](); // 分配的512个int都初始化为0
对于单个int
,也可以初始化为非0值:
int* buffer = new int(5); // 分配的一个int初始化为5
但是无法将分配的所有元素同时初始化为非0值,以下代码是不合法的:
int* buffer = new int[512](0); // 语法错误!!!int* buffer = new int[512](5); // 语法错误!!!
C++11
C++11中增加了初始化列表功能,所以也可以使用以下的方式进行初始化:
int* buffer = new int{}; // 初始化为0int* buffer = new int{0}; // 初始化为0int* buffer = new int[512]{}; // 512个int都初始化为0int* buffer = new int{5}; // 初始化为5
与上面不同的是,如下写法是合法的:
int* buffer = new int[512]{5}; // 第一个int初始化为5,其余初始化为0
但是其结果与我们设想的不一样,它并不是将分配的512个int
都初始化为5,而仅仅是将第一个int
初始化为5,其余的511个仍然初始化为0!
而且正如初始化列表中“列表”两字所指出的,我们实际上可以用一个列表来初始化分配的内存:
int* buffer = new int[512]{1, 2, 3, 4}; // 前4个int分别初始化为1、2、3、4,其余int初始化为0
注:以上代码均在Visual Studio 2015 Community Updata3 下测试通过。
阅读全文
0 0
- java--new的初始化
- new数组的初始化
- new的初始化
- 不加new的初始化
- 二维数组的动态分配(new)、初始化(…
- 二维数组的动态分配(new)、初始化(…
- 使用new时的初始化问题
- Java中new类的时候初始化的顺序
- new对象与Spring对bean的初始化的差别
- C# new和初始化
- 数组的动态分配(new)、初始化(memset)和撤销(delete)
- The New C++ -- 变量 (3. 变量的初始化)
- C++数组的动态分配(new)、初始化(memset)和撤销(delete)
- DataView没有使用New来初始化的杯具
- 二维数组的动态分配(new)、初始化(memset)和撤销(delete)
- OC初始化中new和alloc init的区别
- golang 内置函数new() 和struct{} 初始化的区别
- C++中new是否进行初始化的问题
- LeetCode 7. Reverse Integer
- hdu 2035 人见人爱A^B
- git创建本地仓库并上传到远程仓库
- python re 模块 findall 函数用法简述
- apache-comnons系列之commons-compress1.14 学习笔记
- new的初始化
- B
- 剑指offer 和为S的连续正数序列
- Integer
- 关于dp问题的反思
- Spring知识点整理
- hdu 1103 flo restaurant
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- ThinkPHP5 路由变量规则