直接初始化、拷贝初始化

随声附和 提交于 2020-03-14 18:46:02

1.直接初始化

1)直接初始化实际上是要求编译器选择参数最匹配的一般构造函数

2.拷贝初始化

1)拷贝初始化实际上时要求编译器将右侧运算对象拷贝到正在创建的对象中,如有需要,还要进行类型转换

2)拷贝初始化通常使用拷贝构造函数来完成

3)拷贝初始化发生时机:

  • 用等号"="定义变量时(注意定义二字,不是定义的时候使用等号是调用拷贝赋值运算符)
  • 将一个对象作为实参传递给一个非引用的形参
  • 从一个返回类型为非引用类型的函数中返回一个对象
  • 用花括号列表初始化数组元素或者一个聚合类中的成员(因为也用到了等号"="定义变量)

3)编译器可以“绕过”拷贝构造函数:即编译器有时可以进行优化(但不是必须),跳过拷贝构造函数,直接使用转换构造函数构造对象

string s = "666";    //先调用转换构造函数来构造一个临时的string对象(内容为:666),再调用拷贝构造函数用这个临时对象来构造s
编译器可以优化为:
string s("666");    //直接调用转换构造函数来构造对象

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!