临时对象在什么时候会产生

临时对象

临时对象是看不见的,它们不出现在你的源代码中。在上建立一个没有命名对象叫做临时对象。临时对象产生和释放都会对应构造函数和析构函数的调用。一切都是函数的调用而已。

1、为了使得函数调用成功产生临时对象

仅当通过传值方式和传递常量引用参数时,才可能发生类型转换。传递非常量引用不会发生。区别以下例子

size_t countChar(const string &str);//,常量引用,获取str字符长度
void Upper(string &str);//非常量引用,将str对象转换大写字母

char Buffer[] = "Hello C++";
countChar(Buffer);
/*
为了countChar调用成功,那么必须产生临时对象。以Buffer为参数调用string对象的构造函数建立一个临时string类型对象,然后将str绑定在这个临时对象上。
当countChar返回,退出了临时对象作用域,临时对象调用自己析构函数,释放自己。
*/


Upper(Buffer);
/*
这种不会建立临时对象,因为假如建立临时对象,也是将临时对象字母转为大写,和传递进来的真正参数无任何关系,所以编译器拒绝这种转换。编译器直接编译报错处理。
*/

2、函数返回对象建立临时对象

const A operator+(const A &lhs , const A &rhs);
/*
此处返回值是临时的,含有构造和析构的过程。
*/

猜你喜欢

转载自blog.csdn.net/weixin_41066529/article/details/90201257