c++ 非常量引用产生临时对象

在c++中,一下几种情况会产生临时对象:

1. 按值进行函数参数传递时

2. 函数返回对象时

3. 发生类型转化时。

c++中产生的临时对象是不可修改的,及默认为const的 

非常量引用产生临时对象:

def upper(string& str);

char test [] = "effective c++";

upper(test)  //报错

这里upper 函数的操作是将str转换为大写,而在进行了上面代码的调用时,发生了类型转化,产生临时对象,这时,upper函数进行操作的对象是临时对象,而真正的str并没有进行转换,无法达到预期效果。这就是为什么 C++语言禁止为非常量引用产生临时对象。
若将上文的upper函数的参数改为const string& str, (这里不考虑函数修改str),是正确的。

参考:

1. more effective c++  iterm 19  理解临时对象的来源

2. http://blog.csdn.net/microzone/article/details/6740475

 

~~~~~
原文地址:https://www.cnblogs.com/missmzt/p/5490072.html