唯一失败的情况是通过非const引用传递参数, 因为临时变量不能与它绑定。
void DrawLine(const Vector& v1, const Vector& v2);
如果对象是临时的,为什么使引用const
对临时对象的生命周期有任何影响?
我想我也不完全理解在参数中创建的临时对象的存在范围。
答案 0 :(得分:4)
如果对象是临时的,为什么使引用
const
对临时对象的生命周期有任何影响?
在目前的情况下,问题不是对象的生命周期,而是您是否可以修改它。
说你打个电话。
foo(10);
该函数不应修改在调用中保存值10
的对象。如果foo
的界面是:
void foo(int& ref);
将foo
实施为:
void foo(int& ref)
{
ref = 20;
}
如果调用foo(10)
,这将是一个问题。如果foo
使用const&
,则不会有问题。
void foo(int const& ref)
{
ref = 20; // Not allowed.
}
来自C++11 Standard, Temporary Objects/1
类类型的临时数在各种上下文中创建:绑定对prvalue([dcl.init.ref])的引用,返回prvalue([stmt.return]),创建prvalue的转换,......
和C++11 Standard, References/5.2:
- 否则,引用应是对非易失性const类型的左值引用(即,cv1应为const),或者引用应为右值引用。
临时只能绑定到对prvalue的引用。此类引用的类型必须是const
限定左值引用或右值引用。
MS Visual Studio编译器允许将非const
引用绑定到临时对象,但它不受标准的批准。