在下面的示例中,我想通过std::string
代码:
#include <iostream>
using namespace std;
const std::string GetEditTxtAccount()
{
std::string str = "Hello";
return str;
}
int main()
{
const string&& x = GetEditTxtAccount();
^^^
}
那为什么我们在主体中使用运算符&&
?
谢谢。
答案 0 :(得分:7)
此代码存储了对新字符串的右值引用,它依赖生命周期扩展来使实际字符串保持活动状态。
在这种情况下,这很像做const string& x = GetEditTxtAccount()
,这也是毫无意义的。
这也可以说是危险的,因为如果该函数返回了引用,则可能会使它悬空。
这样做肯定没有好处。
只需声明一个适当的值即可
:const string x = GetEditTxtAccount();
如果您担心副本,则由于移动语义(C ++ 17之前的版本)和有保证的省略号(自C ++ 17起)而不会获得副本。
关于为什么的作者这样写,好吧,有些人在没有真正理解原因的情况下就使用右值引用。