関数は、呼び出し元に2つの値を返す必要があります。実装するための最良の方法は何ですか?
オプション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では、コピー/移動はありませんが、見た目は醜いです。Option1、1.1でコピー/移動は発生しますか?UとVがコピー/移動操作の両方をサポートする巨大なオブジェクトであると仮定しましょう。
Q:標準に従ってRVO / NRVOの最適化を理論的に行うことは可能ですか?はいの場合、gccまたは他のコンパイラはまだ実装されていますか?