【发布时间】:2019-11-15 21:39:40
【问题描述】:
我最近发现std::optional 可以提高代码的清晰度,尤其是对于函数的返回值。但是,我对它对性能的影响有疑问。更具体地说,我想知道是否可以编写类似于以下代码的代码,以允许编译器应用命名返回值优化。
struct Data
{
int x;
int y;
};
std::optional<Data> makeData(bool condition)
{
Data data;
if(condition)
{
data.x = 2.0;
data.y = 2.0;
return data;
}
else
{
return {};
}
}
【问题讨论】:
-
您甚至可以通过
if (condition) return Data{2., 2.}; else return std::nullopt;拥有RVO。 -
return语句的类型必须与RVO的函数返回类型一致。