假设我们有这种情况
std::string v_1()
{
return "name";
}
std::string test = v_1();
RVO 在这里应用吗?我认为答案是否定的,因为应用 RVO 的规则之一是:“如果函数按值返回类类型,并且 return 语句的表达式是具有自动存储持续时间的非易失性对象的名称,则t 函数参数,或 catch 子句参数,并且与函数的返回类型具有相同的类型(忽略顶级 cv 限定),则省略复制/移动“并且在这种情况下,返回的对象不具有与函数的返回类型相同的类型,但我不是 100% 不在这里应用 RVO。
非常感谢。
PS。在本次演讲中https://www.youtube.com/watch?v=AKtHxKJRwp4(第 40 分钟,第 18 秒)来自 Microsoft 的 Stephan 谈到了无法应用 RVO 的情况,因为函数的返回类型不同于返回对象的类型(在他的示例中为元组与对)。我认为同样的原则也适用于此。