在C++语言中,初始化和赋值是两种不同的概念,但是经常可以看到使用赋值运算符 = 来进行初始化,如:string str = "hello";这其实是使用了拷贝初始化。本文将以string类为例子,对各种初始化方式进行一个总结。
下表为string类的各种初始化方式[引自:C++ Primer (第五版)]:
1. 默认初始化
表中string类的第一种初始化方式称为默认初始化,用户没有给string实例s1一个初值,s1将是一个空string。
2. 拷贝初始化表中第三、五行的初始化方式(使用 =)都属于拷贝初始化,第三行将s1的内容拷贝到s2中,第五行将字面值"value"拷贝到s3中。这实际上是调用了string类的operator =,并且发生了隐式的类型转换。
3.直接初始化表中第二、四、六行的初始化方式都属于直接初始化,第二行将s2拷贝s1中,第四行将字面值"value"(不包括末尾的空字符)拷贝到s3中。
需要注意的是第六行,第六行将s4初始化为由连续n个字符c组成的串,这使用了不止一个参数(例子中使用了n和‘c’)。直接初始化的本质是调用构造函数,string的构造函数有多个重载版本。当输入参数只有一个(欲赋予的字符串)的时候,使用直接初始化和拷贝初始化都可以;当输入参数有多个的时候,只能使用直接初始化的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)