シーケンスコンテナのemplace_front()
メンバ関数とemplace_back()
メンバ関数は、C++14では戻り値型がvoid
でしたが、C++1zでは追加された要素への参照が返るようになります。
これは、追加した要素をすぐ使いたい場合に、以下のような冗長なコードになっていた問題への対処です:
// case 1 my_container.emplace_back(…); my_container.back().do_something(…); // case 2 my_container.emplace_back(…); do_something_else(my_container.back());
C++1zでは、このような状況で以下のように書けるようになります:
// case 1 my_container.emplace_back(…).do_something(…); // case 2 do_something_else(my_container.emplace_back(…));
戻り値の型の変更は、ABIを破壊せず、パフォーマンスにも影響はありません。
変更対象は、シーケンスコンテナのemplace_front()
とemplace_back()
、およびqueue
クラスとstack
クラスのemplace()
メンバ関数になります。
push_front()
とpush_back()
は変更なしで、戻り値の型はこれまで通りvoid
です。
参照
- P0084R0 Emplace Return Type
- P0084R1 Emplace Return Type (Revision 1)
- P0084R2 Emplace Return Type (Revision 2)
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。