一个函数需要向调用者返回两个值。最好的实施方式是什么?
选项1:
pair<U,V> myfunc()
{
...
return make_pair(getU(),getV());
}
pair<U,V> mypair = myfunc();
选项 1.1:
// Same defn
U u; V v;
tie(u,v) = myfunc();
选项 2:
void myfunc(U& u , V& v)
{
u = getU(); v= getV();
}
U u; V v;
myfunc(u,v);
我知道 Option2 没有副本/移动,但看起来很难看。选项 1、1.1 中是否会发生任何复制/移动?让我们假设 U 和 V 是支持复制/移动操作的巨大对象。
问:理论上是否可以按照标准进行任何 RVO/NRVO 优化?如果是,是否已实现 gcc 或任何其他编译器?