【发布时间】:2014-11-07 17:33:54
【问题描述】:
我一直读到,在函数调用的情况下,临时变量只能与非常量引用参数绑定..
案例 1:-
例如:-
class Simple{
public:
int i;
Simple(Simple &f)
{
i = f.i + 1;
}
Simple(int j)
{
i = j;
}
};
int main()
{
Simple f1 = Simple(2); // error no matching call fruit::fruit(fruit)...
return 0;
}
这会给我一个错误,因为我试图用非常量引用参数绑定临时。
案例 2:-
try
{
throw e;
}
catch ( exception& e )
{
}
我了解到,当我们抛出异常时,真正传递给 catch 的是抛出的原始异常的副本,即为抛出的对象创建一个临时对象,然后将其传递给 catch 子句。
catch 正在做的是通过非常量引用捕获这个异常。这与我在案例 1 中展示的情况形成鲜明对比。
所以,我的问题是:-
1) 是否存在允许将临时绑定到非常量引用的特定场景。
2) 如果存在,那么在允许这些例外情况时会考虑哪些因素。
【问题讨论】:
-
他的意思是“不允许”,如代码示例所示。
标签: c++ temporary-objects