将临时右值绑定到 std::vector 构造函数中的引用左值
Bind temporary rvalue to reference lvalue in std::vector constructors
直到现在,我认为我们不能将临时右值传递给左值引用。但就在最近,我仔细研究了 std::vector:
的填充构造函数
explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type());
根据我的理解,const value_type& val
是一个参考左值,= value_type()
是一个匿名右值。为什么可能?临时右值不是立即销毁,以至于引用没有指向了吗?
标准的相关部分在[class.temporary](§12.2/5
在N4140):
A temporary bound to a reference parameter in a function call (5.2.2) persists until the completion of
the full-expression containing the call.
因此临时 value_type()
将绑定到 val
并将在构造函数的持续时间内持续存在。
直到现在,我认为我们不能将临时右值传递给左值引用。但就在最近,我仔细研究了 std::vector:
的填充构造函数explicit vector (size_type n, const value_type& val = value_type(),
const allocator_type& alloc = allocator_type());
根据我的理解,const value_type& val
是一个参考左值,= value_type()
是一个匿名右值。为什么可能?临时右值不是立即销毁,以至于引用没有指向了吗?
标准的相关部分在[class.temporary](§12.2/5
在N4140):
A temporary bound to a reference parameter in a function call (5.2.2) persists until the completion of the full-expression containing the call.
因此临时 value_type()
将绑定到 val
并将在构造函数的持续时间内持续存在。