临时对象
临时对象是看不见的,它们不出现在你的源代码中。在栈上建立一个没有命名对象叫做临时对象。临时对象产生和释放都会对应构造函数和析构函数的调用。一切都是函数的调用而已。
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); /* 此处返回值是临时的,含有构造和析构的过程。 */