临时对象

临时对象在C++中非常重要,而右值引用的提出就是为了解决程序中由于临时对象导致的效率低的问题。

一般来说临时对象会在以下四种情况中产生:

1、类型转换

2、值传递

3、值返回

4、定义

先从第一点说起。

string t(const string& str);

char m[] ="Hello World";

t(m);

在程序的最后一步t(m)中产生类型转换;首先定义一个string类型的临时对象,在将m转换为string,此时调用string类型的constructor构造函数.当返回时,临时对象被销毁。注意如果程序的第一句改为:
string t(string& str);
这程序的编译都不会通过,因为当程序的最后一步发生类型转换时,实际上传递的是临时对象,这样如果在程序中发生修改对象的情况的话,改变的是临时对象,这很显然是不对的。函数前添加explicit可以避免类型的隐式转换。

第二种值传递的情况:

string a = "abc";

string buff(a);
当执行第二句代码时生成临时对象,先定义sting类型临时对象,再按拷贝构造函数生成临时对象,最后按引用传递临时对象给buff函数调用。

第三种情况按值返回:

int buff(const int& a,const int& b);

int m = 1;
int n = 2;

buff(m,n);
当执行最后一句代码时生成临时对象,int buff(const int& temp,const int& a,const int& b);

其中temp为临时对象,最后将temp的值返回。

第四种情况为定义:

int a(10);
int b = 100;
第一句代码一定不会产生临时对象,第二种情况有可能会产生临时对象。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值