比方说,我们有这种情况RVO是否适用于这种情况?
std::string v_1()
{
return "name";
}
std::string test = v_1();
是RVO应用在这里?我认为答案是否定的,因为应用RVO的规则是:“如果一个函数按值返回一个类的类型,并且return语句的表达式是一个非自动存储持续时间的非易失性对象的名称,函数参数或catch子句参数与具有相同类型(忽略顶级cv资格)作为函数的返回类型,则复制/移动被省略“ 而在这种情况下返回的对象没有相同类型的函数的返回类型,但我不是100%,RVO不适用于此处。
非常感谢。
PS。在这次演讲中https://www.youtube.com/watch?v=AKtHxKJRwp4(分钟40,第18次)来自微软的Stephan谈到了RVO无法应用的情况,因为函数的返回类型与返回对象的类型不同(在他的例子中是一个元组与一对)。我认为这里适用同样的原则。
它大部分等价于'return std :: string(“name”)'...... – Jarod42
返回的结果是* not * const char *'... – user268396
@ user268396你是对的,但是在大多数情况下案例(也在这里)它被隐式转换为一个之前转换为字符串... :) –