鱼儿慢慢游~~

导航

 

在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

 

 

posted on 2016-05-13 17:10  miss_UU  阅读(377)  评论(0编辑  收藏  举报