这是未定义的行为吗?如果没有,行为是什么?
// 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;
}
答案 0 :(得分:4)
C ++ 11 8.5.3描述了引用的初始化(包括右值引用)。
它说:
否则,创建并初始化临时类型“cv1 T1” 来自初始化表达式使用非引用的规则 复制初始化(8.5)。然后将引用绑定到 暂时的。
因此,int类型的临时值绑定到rvalue引用,并在调用返回后立即丢弃。
第12.2节(Temporaries)给出了与你非常相似的例子。