Sim*_*LIU 4 c++ rvalue overload-resolution c++11
我有以下代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
lvalue.
rvalue
lvalue.
lvalue.
Run Code Online (Sandbox Code Playgroud)
std::move()并且int&&是右值参考,我想知道为什么test(std::move(a))和test(b)输出lvalue?它与签名匹配和函数重载有关吗?
输出应该是:
lvalue.
rvalue
rvalue
lvalue.
Run Code Online (Sandbox Code Playgroud)
在rvalues和类型为rvalue引用的表达式之间存在非常重要的区别.类型b是rvalue引用int,但表达式b是左值; 它是一个变量,你可以把它的地址.这就是为什么输出的最后一行lvalue而不是rvalue.要将其更改为右值,您应该调用std::move它:
test(std::move(b));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |