c++ 初始化

一、默认初始化、值初始化、拷贝初始化、直接初始化和列表初始化

默认初始化依赖于类的默认行为,函数外定义的类如果没有初始值,将被默认初始化为这个类“0”这个概念对应的值。函数内定义的未初始化的值执行默认初始化时有两种情况,当这个类是C++内置类的时候,比如说int,float,这个值不被初始化;当这个类是用户定义的或者是我们使用类模板定义的,将被构造函数初始化。其中如果这个类的对象被隐式初始化为这个类意义上的零,对应的这种初始化的行为就叫做值初始化。
拷贝初始化和直接初始化的区别只在于初始化语句带()、{}还是由=构成。使用小括号或者大括号初始化对象的行为叫做直接初始化。使用=号初始化对象的行为叫做拷贝初始化,其中,使用{}初始化对象的行为叫做列表初始化。特点是列表初始化的列表内容必须要和初始化对象的类型严格匹配。

二、用数组初始化vector对象 和 用string对象赋值字符数组

作为与旧代码的接口,C++提供了方便的把数组转化为vector对象的方法。在声明vector对象时,我们可以通过迭代器用一个数组初始化vector。

在已经存在int oldarray[10];的情况下,声明的语句形如:vector<int> arr( begin(oldarray) , end(oldarray) );可以把arr初始化为oldarray。

begin和end这两个函数在<iterator>头文件里,作用是返回数组的首元素/尾后指针。这种初始化接受两个参数:拷贝开始部分指针和结束部分的指针。

我们也可以写形如int arr[10]={0}; vector <int> newarr( arr+1 , arr+6 );这种方式拷贝数组arr的第2~第5号元素,并用它们初始化newarr。

类似地,我们可以通过string a("23333333\n"); const char *b=a.c_str();这样的语句使string型的a被赋值给字符数组指针b。返回结果是const是为了确保我们不会通过这个指针改动返回的字符数组的值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值