我有以下代码:
perf stat -e fp_assist.any
如您所见,void g(int& i) {
std::cout << "g(int&)" << std::endl;
}
void g(int&& i) {
std::cout << "g(int&&)" << std::endl;
}
void f(int&& i) {
g(i);
}
int main() {
f(3); // g(int&)
}
函数中的参数i
是一个右值引用,因此,当它调用f
时,对应的g(i)
函数将一个右值应该调用引用(即结果应为g
),但事实并非如此。实际上,g(int&&)
被调用了。为什么?
我的猜测是,当我们进入g(int& i)
函数内部时,f
成为左值而不是右值,这是正确的吗?左值和右值可以互换吗?