(一种)

std::string doNothing(const std::string&& s)
{
  return std::move(s);
}

(B)
std::string doNothing(const std::string& s)
{
  return std::move(s);
}

(测试)
const std::string str = "aaaaaa";
const auto str2 = doNothing(str);

两个问题:
(A)和(B)不同吗?
在(测试)中:str是否会不确定?它移到str2之后?

最佳答案

std::move以(非常量)右值引用作为参数。因此,无论是否有右值,您都不能将其直接绑定到const任何东西。因此,在(A)和(B)中,当您调用std::move时,它将创建一个未命名的临时副本并将其移动。

结果,str永远不会移动,也不会受到任何影响。

要在不复制的情况下摆脱const,您需要一个明确的const_cast。如果这样做,您将获得明显的未定义行为。

07-24 09:45
查看更多