在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