C++:拷贝初始化与赋值的区别

在C++中,初始化和赋值是不同的操作!

首先来看概念:
初始化创建变量时,赋予其一个初始值。
赋值:把对象当前值擦除,以一个新值代替。

而初始化中有两种形式:直接初始化拷贝初始化

如果我们使用“=”即等号初始化一个变量,执行的是拷贝初始化

string s = "hello";//拷贝初始化
//等价于s("hello"),只是这里使用了等号,所以为拷贝初始化

反之,不使用等号的话,执行的是直接初始化

string s("hello");//直接初始化
//s为字面值hello的副本。这里没有使用等号,所以为直接初始化

还有一点,初始化是在创建变量时发生的:

int i = 0;//创建了变量i,且使用了“=”,为初始化(此处为拷贝初始化)
i = 6;//i已经存在了,所以为赋值
int a = i;//用已经创建出来的i,且用“=”初始化一个新对象a ,为拷贝初始化
int b(i);//用已经创建出来的i,初始化b,但没有使用“=”,为直接初始化

只要我们使用了等号来初始化变量,就会发生拷贝初始化

拷贝初始化通常使用拷贝构造函数来完成。
以下情况会发生拷贝初始化

  1. 使用“=”来初始化变量
  2. 将一个对象作为实参传递给一个非引用类型的形参
  3. 从一个返回类型为非引用类型的函数返回一个对象
  4. 用花括号列表初始化一个数组中的元素或一个聚合类中的成员。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值