绑定临时右值以引用std :: vector构造函数中的左值

时间:2015-02-03 03:54:39

标签: c++ vector pass-by-reference lvalue rvalue

到现在为止,我认为我们无法将临时右值传递给左值参考。但就在最近,我仔细研究了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()是一个匿名左值。为什么可能?是不是临时rvalue立即被销毁了,所以引用没有什么可指向的?

1 个答案:

答案 0 :(得分:4)

标准的相关部分位于[class.temporary](N4140中为§12.2/5):

  

函数调用(5.2.2)中的引用参数的临时绑定一直持续到完成   包含调用的完整表达式。

因此临时value_type()将绑定到val并将在构造函数的持续时间内持续存在。