【发布时间】:2016-01-14 08:26:44
【问题描述】:
我有以下代码:
#include <iostream>
using namespace std;
void test(int& a) {
cout << "lvalue." << endl;
}
void test(int&& a) {
cout << "rvalue" << endl;
}
int main(int argc, char *argv[]) {
int a = 1;
int&& b = 2;
test(a);
test(1);
test(std::move(a));
test(b);
}
哪个输出:
lvalue.
rvalue
lvalue.
lvalue.
std::move() 和int&& 是右值引用,我想知道为什么test(std::move(a)) 和test(b) 输出lvalue?它与签名匹配和函数重载有关吗?
【问题讨论】:
-
你用的是什么编译器?输出应该是
lvalue rvalue rvalue lvalue。 -
@TartanLlama 我猜是 MSVC,它总是有问题。
-
@TartanLlama,我用的是Mac,编译器应该是LLVM的clang。
标签: c++ c++11 overload-resolution rvalue