将临时右值绑定到 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 并将在构造函数的持续时间内持续存在。