読者です 読者をやめる 読者になる 読者になる

C++1z emplace_frontとemplace_backで追加された要素を返す

C++

シーケンスコンテナの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です。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。