到现在为止,我认为我们无法将临时右值传递给左值参考。但就在最近,我仔细研究了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立即被销毁了,所以引用没有什么可指向的?
答案 0 :(得分:4)
标准的相关部分位于[class.temporary](N4140中为§12.2/5
):
函数调用(5.2.2)中的引用参数的临时绑定一直持续到完成 包含调用的完整表达式。
因此临时value_type()
将绑定到val
并将在构造函数的持续时间内持续存在。