右值引用何时表现得像函数中的左值?
在下面的代码片段中,函数 foo 接收到一个右值引用名为 bar 的参数。
void foo(string&&& bar) { string* temp = &bar; cout << *temp << " @:" << temp << endl; }
这段代码引发了一个问题:bar 是否被视为左值在函数内,由于可以获取地址?
bar 是右值还是左值?
这个问题本质上在问题本身中得到了回答。任何有名称的东西都是左值。因此,bar 被视为左值。但是,需要注意的是,bar 的 类型 为“对字符串的右值引用”。
要将 bar 视为右值,必须对其应用 std::move() .
为什么要区分左值引用和右值引用?
这种区别变成在考虑什么可以绑定到每个引用类型时很重要。左值可以绑定到左值引用,而右值可以绑定到右值引用(任何东西都可以绑定到 const 的左值引用)。
换句话说,右值不能绑定到左值引用,反之亦然。
右值引用类型的参数
处理右值的函数参数时引用类型,必须了解引用所指向的值的含义。右值引用表示分配给它的值是右值。因此,一旦表达式结束,其资源将被释放,从而允许将其作为右值进行管理。
传递右值引用
进一步传递右值引用参数时,有两个选项:
结论
左值引用和右值引用之间的区别不在于它们获得后的行为,而在于可以绑定到它们的内容。这种理解对于有效处理和管理函数内的引用至关重要。
以上是右值引用何时在函数内像左值一样起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!