ホームページ >バックエンド開発 >C++ >初期化リストを C 演算子の右側で直接使用できないのはなぜですか?

初期化リストを C 演算子の右側で直接使用できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-23 11:14:14350ブラウズ

Why Can't Initializer Lists Be Directly Used on the Right-Hand Side of C   Operators?

初期化リストと演算子の右側

初期化リストは変数とオブジェクトを初期化する便利な方法ですが、その使用方法は次のとおりです。演算子の右側では制限されています。このようなコンテキストで初期化子リストを許可するのは論理的であるように思われるため、これは不可解になる可能性があります。

制限の理由

C 標準によれば、初期化子リストは考慮されません。表現。演算子の引数には通常式が必要であるため、純粋な初期化子リストは禁止されています。

例外

初期化子リストの使用を許可する例外がいくつかあります。

  • 関数の引数として
  • 添え字内式
  • 代入の右側

根拠

C 11 標準委員会は、演算子の左側を使用してパーサーの実装を簡素化します。左側でも許可せずに右側で許可すると、矛盾が大きくなりすぎます。

代替手段

幸いなことに、使用する代替手段があります。演算子の右側にある初期化子リスト。 1 つのオプションは、初期化子リストをかっこで囲み、右辺値参照式に変換することです:

baz << (std::initializer_list<int>{1, -2, "foo", 4, 5});

もう 1 つのオプションは、適切な型の一時変数を作成し、それを初期化子リストで初期化することです:

auto data = bar{1, -2, "foo", 4, 5};
baz << data;

これらの代替手段は、初期化子リストを直接使用するほど便利ではないかもしれませんが、次の右辺の制限に対する回避策を提供します。演算子。

以上が初期化リストを C 演算子の右側で直接使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。