我不确定是否应该打扰,因为它不是安全性至关重要的应用程序,但是我很好奇,自己也无法弄清楚:编译器会为以下方法应用RVO吗?
QJsonObject MyClass::buildObject(const QVector2D& position, const QString& id) const
{
QJsonObject retObject {
{"Position", QJsonArray{position.x(), position.y()}},
};
if (!id.isNull() && !id.isEmpty())
{
retObject.insert("Id", id);
}
return retObject;
}
QJsonObject类没有实现move构造函数,也没有实现move赋值运算符。我正在Ubuntu下通过Qt 5.9使用GCC 5.4(--std = c++ 14)。
最佳答案
允许编译器在此处执行RVO,但不是必须这样做,请参阅。 cppreference
因此,编译器无法在返回时优化复制retObject
,但是可以省略创建临时返回值对象,而是直接将retObject
复制到分配的MyClass::BuildObject
中。
关于c++ - RVO是否可以在这种情况下工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51594346/