我一直读到,在函数调用的情况下,临时变量只能与非常量引用参数绑定。
情况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)如果有那么在允许这些例外时考虑了哪些因素。