栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

C++-直接初始化和拷贝初始化

Java 更新时间:发布时间: 百科书网 趣学号

文章目录
    • 初始化
      • 拷贝初始化
      • 直接初始化
    • 什么是拷贝构造函数
    • 拷贝初始化与拷贝构造函数
    • 拷贝构造函数可能在何时调用
    • 例子

初始化

变量的初始化有两种方式:

  • 直接初始化(direct initialization)
  • 拷贝初始化(copy initialization)
拷贝初始化

如果使用等号(=)初始化一个变量,则执行的是拷贝初始化。

直接初始化

不使用等号的,则是直接初始化。

什么是拷贝构造函数

如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数

拷贝初始化与拷贝构造函数

拷贝初始化依靠拷贝构造函数(通常)或移动构造函数来完成

拷贝构造函数可能在何时调用
  1. 使用等号定义一个变量时
  2. 将一个对象作为实参传递给一个非引用类型的形参
  3. 从一个返回类型为非引用类型的函数返回一个对象1
  4. 用花括号列表初始化一个数组中的元素或一个聚合类中的成员
例子
string s="123456";

因为使用了等号,所以这里是拷贝初始化,这里拷贝初始化依靠拷贝构造函数完成。正常流程如下:

  1. "123456"隐式转化为string类型,生成一个临时的string对象
  2. 此时正在定义变量s,因此调用拷贝构造函数string(const &s)
  3. s初始化完成
    注意,某些编译器会进行优化,因为string有接受一个const char *的构造函数,所以可能优化为直接调用该构造函数,相当于直接初始化,而不经过上述1,2过程。关于优化问题的讨论,参见这里和这里
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/294561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号