ホームページ > バックエンド開発 > C++ > std::initializer_list から要素を移動できますか?

std::initializer_list から要素を移動できますか?

Patricia Arquette
リリース: 2024-12-26 00:49:09
オリジナル
971 人が閲覧しました

Can You Move Elements Out of a std::initializer_list?

初期化リストと移動セマンティクス: 要素を移動できますか?

初期化リストと移動セマンティクスの使用法に関して疑問が生じます。要素を std::initializer_list から移動することは許可されますか?これをさらに調査してみましょう。

問題

次のコード スニペットを考えてみましょう。

#include <initializer_list>
#include <utility>

template<typename T>
void foo(std::initializer_list<T> list)
{
    for (auto it = list.begin(); it != list.end(); ++it)
    {
        bar(std::move(*it));   // kosher?
    }
}
ログイン後にコピー

ここでは、次のことが可能かどうかを確認したいと思います。要素を外に移動するstd::initializer_list.

答え

驚くべきことに、答えはノーです。式 std::move(*it) は移動にはなりません。代わりに、型 T const && の不変の右辺値参照を生成します。これは、initializer_list の begin メソッドと end メソッドが const T * を返し、移動セマンティクスが許可されないためです。

おそらく、コンパイラが静的に初期化された定数として initializer_list を作成できるようにするためです。ただし、コンパイラの裁量に応じて、begin と end が、initializer_list または const initializer_list を返すようにする方がより直観的です。

さらなる考慮事項

ISO 提案が作成されています。移動専用タイプのInitializer_listサポートを提供するために作成されました。この提案は、まだ初期段階ではありますが、ここで提起された問題に対処しています。

以上がstd::initializer_list から要素を移動できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート