C++11初始化与构造

研究vector容器使用方法时,初始化与构造需要区分

初始化不是赋值,初始化的含义是创建变量时赋予其初始值,赋值,则是将对象当前值擦除,用新值替代

拷贝初始化与直接初始化是一对概念,特征为使用等号是拷贝初始化(copy initialization),把等号右侧的值赋值到新建对象中去,(右侧是值,一般在花括号内,若为对象,会先调用)不使用等号,是直接初始化(direct initialization)
初始化时,三原则
1.拷贝初始化只能提供一个初始值,其真正含义为,初始值只有一个时,直接初始化或者拷贝初始化均可

string s5 = "richard";
string s6  ("richard");

为多个值时,只能使用直接初始化
string s7(10,’c’);

string s8 = stirng(10,’c’);
的写法看似是拷贝初始化,但是是显示地创建了一个(临时)对象用于拷贝
本质为
string temp(10,’c’);
string s8 = temp;

2.提供类内初始值,即,提供的参数为构造对象的类内的初始值,只能使用拷贝初始化(=)或者参数列表{}形式初始化
规则为:创建对象时,类内初始值用于初始化数据成员,没有初始值的成员将被默认初始化,(内置类型(编程语言自定义类型:C++ int double e.g.)未被显示初始化,默认初始化的规则为,由定义的位置决定,定义于任何函数体之外的变量被初始化为0,函数体内,内置类型变量不被初始化,未被初始化的内置类型变量是未定义的,试图拷贝或其他形式访问将引发错误)
p40

3.如果提供的是初始元素值的列表,只能把初始值放在花括号里进行初始化,而不是放在圆括号里面
即vector v1{“a”,”an”};

作为 C++11新标准的一部分,花括号初始化变量得到全面应用,,该种方式称之为列表初始化. C++11 p39

vactor容器的值初始化(元素数量,具体值),可以只提供元素数量,vector元素对象类型不支持默认初始化,就必须提供相应的值,内置类型int为0,string为空
vector列表初始化{a, b,c}一一对应

想要使用列表初始化vector对象,花括号元素值必须与元素类型相同

vector<int>(10);    //10个0
vector<int>{10};    //1个10

vector<int>(101);    //10个1
vector<int>{101};    //两个元素10,1

p89

结论:
圆括号就是构造,(个数,具体值)
花括号就是列表初始化

reference: C++primer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值