gpt4 book ai didi

c++ - 右值引用参数变成左值

转载 作者:太空狗 更新时间:2023-10-29 19:48:30 24 4
gpt4 key购买 nike

请考虑以下代码:

class a {
public:
int a;
};

void func1( a &&var1 );

void func2( a &&var2 )
{
func1(var2);
}

尝试编译时,gcc 返回以下内容:

question.cpp: In function ‘void func2(a&&)’:
question.cpp:10:14: error: cannot bind ‘a’ lvalue to ‘a&&’
func1(var);
^
question.cpp:6:6: error: initializing argument 1 of ‘void func1(a&&)’
void func1( a &&var );
^

尽管 var2 被明确定义为右值引用,但它似乎是一个左值。双符号一旦分配就失去意义了吗?这里的工作机制是什么?

最佳答案

在函数实现中,一次右值变成了一个常规变量(左值),您可以对其进行赋值。如果你想再次将它变成一个右值,你必须使用 std::move,如:

void func2( a &&var2 ) {
func1(std::move(var2));
}

关于c++ - 右值引用参数变成左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459603/

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