C ++临时对象的生命周期

时间:2014-01-19 04:20:02

标签: c++

void foo(const C &);
foo(C());

在这种情况下,临时C对象会一直存在foo()

但我的问题是:

struct C { operator int(); }
void bar(int i);
bar(C());

在这种情况下,临时C对象是否存在直到bar()结束?如果没有,有没有办法让临时对象生效到bar()结束?

编辑:感谢user2109558,我知道代码不起作用。那以下代码是否运作良好?

void bar(int i);
void bar(C &&c) { bar(c); }

1 个答案:

答案 0 :(得分:-2)

不!代码bar(C()); 等于  int num = C(); bar(num); 所以,临时C对象直到bar()结束才会生效 你必须改变bar函数参数,例如void bar(const C &)或添加全局C对象变量,例如:

C c;
void bar(int i) {
 ..... 

}

但没有任何建议。