问题来源: https://stackoverflow.com/a/36955656/4784683
唯一失败的情况是通过非常量引用传递参数,
因为临时变量无法绑定到它。
void DrawLine(const Vector& v1, const Vector& v2);
如果对象是临时的,为什么要进行引用const
对临时对象的生命周期有什么影响?
我想我也没有完全理解在参数中创建的临时对象的存在范围。
如果对象是临时的,为什么要进行引用const
对临时对象的生命周期有什么影响?
在当前上下文中,问题不在于对象的生命周期,而在于是否可以修改它。
说你打电话。
foo(10);
保存值的对象10
调用中不应由函数修改。如果接口为foo
is:
void foo(int& ref);
实施是公平的foo
as:
void foo(int& ref)
{
ref = 20;
}
这将是一个问题foo(10)
。如果有的话,这不会有问题foo
uses a const&
.
void foo(int const& ref)
{
ref = 20; // Not allowed.
}
From C++11 标准,临时对象/1 https://timsong-cpp.github.io/cppwp/n3337/class.temporary#1
类类型的临时对象是在各种上下文中创建的:将引用绑定到纯右值 ([dcl.init.ref] https://timsong-cpp.github.io/cppwp/n3337/dcl.init.ref),返回纯右值 ([stmt.return] https://timsong-cpp.github.io/cppwp/n3337/stmt.return),创建纯右值的转换,...
和来自C++11 标准,参考文献/5.2 https://timsong-cpp.github.io/cppwp/n3337/dcl.init.ref#5.2:
-- 否则,该引用应为非易失性 const 类型的左值引用(即 cv1 应为 const),或者该引用应为右值引用。
临时变量只能绑定到纯右值的引用。这种引用的类型必须是const
合格的左值引用或右值引用。
MS Visual Studio 编译器允许绑定非const
对临时对象的引用,但它不受标准认可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)