右值引用变量是左值
#include <iostream>
void fun(const int& lref) {
std::cout << "l-value reference to const: " << lref << '\n';
}
void fun(int&& rref) {
std::cout << "r-value reference: " << rref << '\n';
}
int main() {
fun(5);
int x{5};
fun(x);
int& y{x};
fun(y);
int&& z{5};
fun(z);
return 0;
}
输出
r-value reference: 5
l-value reference to const: 5
l-value reference to const: 5
l-value reference to const: 5
5是右值,fun(5,会选择fun(int&&)版本。
x是左值,fun(x),会选择fun(const int&)版本。
y是左值引用,fun(y),会选择fun(const int&)版本。
z是右值引用,fun(z),会选择fun(const int&)版本?z不是右值引用吗?怎么选择了左值引用版本,有点反直觉。
奇怪的知识增加了
虽然变量z的类型是int&&,但在表达式中它是一个左值(所有命名变量都是这样)。对象的类型和其值类别是独立的。