请考虑以下代码:
class a {
public:
int a;
};
void func1( a &&var1 );
void func2( a &&var2 )
{
func1(var2);
}
Run Code Online (Sandbox Code Playgroud)
在尝试编译它时,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 );
^
Run Code Online (Sandbox Code Playgroud)
似乎var2是一个左值,尽管它被明确定义为右值引用.一旦分配,双&符号是否会失去意义?在这里工作的机制是什么?
在函数实现中,once -rvalue成为一个常规变量(l值),您可以在其中进行赋值.如果要再次将其转换为右值,则必须使用std::move,如:
void func2( a &&var2 ) {
func1(std::move(var2));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |