gpt4 book ai didi

C++11 左值、右值和 std::move()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:43 31 4
gpt4 key购买 nike

我有以下代码:

#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.
rvalue
rvalue
lvalue.

右值表达式和右值引用类型的表达式之间有一个非常重要的区别。 b 的类型是对 int 的右值引用,但表达式 b 是左值;它是一个变量,你可以取它的地址。这就是为什么最后一行输出是 lvalue 而不是 rvalue 的原因。为了将其更改为右值,您应该对其调用 std::move:

test(std::move(b));

关于C++11 左值、右值和 std::move(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784755/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com