admin 管理员组文章数量: 1087652
直接初始化与拷贝初始化
C++语言有几种不同的初始化方式。如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器将等号右边的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化(direct initialization)。
string s1 = "hiya"; // 拷贝初始化
string s2("hello"); // 直接初始化
string s3(10, 'c'); // 直接初始化
当使用直接初始化时,我们实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数(其实也包括拷贝构造函数)。当我们使用拷贝初始化时,我们要求编译器将右侧运算对象拷贝到正在创建的对象中,如果需要的话还要进行类型转换。
拷贝初始化通常使用拷贝构造函数来完成。拷贝构造函数不仅在我们用等号=定义变量时调用,在下列情况下也会调用:
(1) 根据另一个同类型的对象显式或隐式初始化一个对象;
(2) 将一个对象作为实参传递给一个非引用类型的形参;
(3) 从一个返回类型为非引用类型的函数返回一个对象;
(4) 用花括号列表初始化一个数组中的元素或一个聚合类中的成员;
(5) 标准库容器初始化,或者调用insert或push成员时,容器会对其元素进行拷贝初始化。
本文标签: 直接初始化与拷贝初始化
版权声明:本文标题:直接初始化与拷贝初始化 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700324072a397051.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论