初始化(C++primer5th学习笔记)

来源:互联网 发布:kali linux安装到u盘 编辑:程序博客网 时间:2024/06/07 00:25

初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。(P39)
1、默认初始化
(1)对于内置类型(int),定义在任何函数之外的变量被初始化为0,而定义在函数体内部则是未定义,不能对其进行访问。通过new生成的int类型对象也是未定义。
(2)对于类类型(string),由其默认构造函数初始化。
2、直接初始化和拷贝初始化
拷贝初始化:使用等号初始化变量执行的是拷贝初始化,把等号右侧的初始值拷贝到新创建的对象中,int i=0;
直接初始化:如果不使用等号则执行的是直接初始化。
3、值初始化
如果只提供容器容纳数量而略去初始值,会创建一个值初始化的元素初值。

vector<int> i(10);          //10个元素,每个都初始化为0    
vector<string> s(10);       //10个元素,每个都是空string对象

列表初始值还是元素数量?
一般用圆括号表示的是元素的数量,提供的值是用来构造对象的。
用花括号表示的是尽量当成元素初始值的列表,表示列表初始化对象。

vector<int> v1(10);         //10个元素,每个都初始化为0vector<int> v2{10};         //1个元素,值为10vector<int> v3(10,1);       //10个元素,每个都是1vector<int> v4{10,1};       //两个元素,值分别是10和1

4、列表初始化
使用列表初始化在存在丢失信息的风险时,编译器会报错。即需要进行类型转换的时候不能使用列表初始化。
注意事项:
对于定义了自己的构造函数的类类型,要求值初始化是没有意义的。但对于内置类型,值初始化的内置类型对象有着良好的定义的值,而默认初始化的对象的值是未定义的。

int *p1=new int;        //未定义int *p2=new int();      //值初始化为0
0 0
原创粉丝点击