【发布时间】:2025-12-06 22:30:01
【问题描述】:
好的,我开始了解右值引用的要点(我认为)。我有我正在编写的这段代码 sn-p:
#include <iostream>
using namespace std;
std::string get_string()
{
std::string str{"here is your string\n"};
return std::move(str); // <----- cast here?
}
int main ()
{
std::string my_string = std::move(get_string()); // <----- or cast here?
std::cout << my_string;
return 0;
}
所以我有一个简单的例子,我有一个返回字符串副本的函数。我已经读过它不好(并且得到了核心转储来证明这一点!)返回对本地临时变量的任何引用,所以我没有尝试这样做。
在main() 的分配中,我不想复制构造该字符串,我想移动构造/分配字符串以避免复制过多的字符串。
Q1:我在
get_string()中返回了临时变量的“副本” - 但我已将返回值转换为右值红色。那是没有意义的,还是在做任何有用的事情?Q2:假设 Q1 的答案是我不需要这样做。然后我是将临时变量的新副本移动到
my_string,还是直接将临时变量str移动到my_string。Q3:为了将字符串返回值存储到“外部”(在我的情况下是 main())变量中,您需要的最小副本数是多少,您如何做到这一点(如果我还没有实现)?
【问题讨论】:
标签: c++11 rvalue-reference stdmove