了解右值参考

时间:2014-04-16 00:32:42

标签: c++ rvalue-reference

这是未定义的行为吗?如果没有,行为是什么?

// In some external library with, say, header "a.h"
void f(int &&x) {
  x = 5;  // Which memory does this assignment apply to?
}

#include "a.h"
int main() {
  f(7);
  // At this point, where is the value of 5?
  return 0;
}

1 个答案:

答案 0 :(得分:4)

C ++ 11 8.5.3描述了引用的初始化(包括右值引用)。

它说:

  

否则,创建并初始化临时类型“cv1 T1”   来自初始化表达式使用非引用的规则   复制初始化(8.5)。然后将引用绑定到   暂时的。

因此,int类型的临时值绑定到rvalue引用,并在调用返回后立即丢弃。

第12.2节(Temporaries)给出了与你非常相似的例子。