我知道通常不建议使用std::move
返回值,即
bigObject foo() { bigObject result; /*...*/ return std::move(result); }
不是简单地
bigObject foo() { bigObject result; /*...*/ return result; }
因为它会妨碍返回值优化。但是对于有多个不同返回的函数,特别是像
class bar {
bigObject fixed_ret;
bool use_fixed_ret;
void prepare_object(bigObject&);
public:
bigObject foo() {
if(use_fixed_ret)
return fixed_ret;
else{
bigObject result;
prepare_object(result);
return result;
}
}
};
我认为在这样一个函数中普通的返回值优化是不可能的,所以将其放入是否是个好主意呢?
return std::move(result);
是应该写成这样,还是更好的写法是(我个人认为比较丑,但这是有争议的)
bigObject foo() {
bigObject result;
if(use_fixed_ret)
result = fixed_ret;
else{
prepare_object(result);
}
return result;
}
foo()
函数中摆脱else{...
分支。因为如果第一个语句为真,则第二个语句将不会被评估。 - 111111fixed_ret
。因此多次调用该函数可能无法正常工作。 - balkireturn fixed_ret;
会创建一个副本。 - scpayson