我很熟悉,append
instd::string
返回std::string&
,因此它不符合被移动的条件,所以结果不会被移动。
#include <string>
int main()
{
std::string s = std::string("A").append("B");
return s.size();
}
#include <string>
int main()
{
std::string s = std::move(std::string("A").append("B"));
return s.size();
}
在那里您可以看到,后一个示例将产生更少的分配,因此在这种情况下,最好移动一些看起来像临时的东西。我的问题是为什么他们(委员会)不添加简单&&
的重载来生成结果,或者append
取决于上下文?我的意思是类似于正在做的事情。有没有一个例子可以证明这种优化是虚假的?std::string&
std::string&&
std::optional
value