名前付きパラメーターコードを開発することを考えていましたが、次のようなコードを考えるようになりました。
#include <utility>
int main()
{
using std::make_pair;
auto x = make_pair(1, make_pair(2, make_pair(3, make_pair(4,5))));
}
これを単純に実装すると、最初に「make_pair(4,5)」を実行し、次に結果を「make_pair(3、...)」の2番目の要素にコピーしてから、「make_pair」の2番目の要素にコピーします。 (2、...)」など。
これにより、残念ながらO(n ^ 2)のパフォーマンスが発生し、不要なコピーが多数発生します。ここでも、(名前付きの)戻り値の最適化がどのように役立つかわかりません。
理想的には、それがの最後の場所にあることをmake_pair(4,5)
認識x
し、その場所に自分自身を構築します。
これをさらに進める:
#include <utility>
int main()
{
using std::make_pair;
auto&& x1 = make_pair(3, make_pair(4,5));
auto x2 = make_pair(1, make_pair(2, std::move(x1)));
}
このようなコードのコピーも避けたいです。
この最適化は非常に明白なので、コンパイラーがそれを実行すると想定する必要がありますか、それともコピーを回避するためにこれをコーディングする別の方法がありますか?