ホームページ > バックエンド開発 > C++ > Const Map アクセス: なぜ `operator[]` の代わりに `at()` を使用するのでしょうか?

Const Map アクセス: なぜ `operator[]` の代わりに `at()` を使用するのでしょうか?

DDD
リリース: 2024-12-04 09:30:12
オリジナル
123 人が閲覧しました

Const Map Access: Why Use `at()` Instead of `operator[]`?

定数マップ内の要素へのアクセス: Operator[] と at()

定数マップを使用する場合、operator[ を使用して要素にアクセスします。 ]は失敗する可能性があります。ただし、at() の使用は実行可能な代替手段です。なぜそうなるのでしょうか?

非定数マップでは、operator[] は 2 つの関数を実行します:

  • キーが存在する場合、関連付けられた値への参照を返します。
  • キーが存在しない場合は、キーに関連付けられたデフォルトで構築された値を構築し、への参照を返します。

ただし、const マップでは、operator[] は基礎となるデータ構造を変更することはできません。したがって、最初の関数のみを実行でき、2 番目の関数を使用して新しい要素を挿入しようとするとエラーがスローされます。

対照的に、at() は、C 11 で導入されたメソッドであり、特に、要素にアクセスするために使用されます。定数マップ。これにはいくつかの利点があります。

  • キーが存在しない場合は std::out_of_range 例外をスローし、vector や deque などの他のコンテナとの一貫性を保ちます。
  • const オーバーロードにより、const マップでの使用が可能になります。

これらの理由から、at() は、 const std::map 内の要素にアクセスします。コード例:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char>& B = A;

    std::cout << B.at(3) << std::endl; // it works
    std::cout << B[3] << std::endl;    // it does not work
}
ログイン後にコピー

出力:

c
error: can't access elements with operator[] in a const std::map
ログイン後にコピー

以上がConst Map アクセス: なぜ `operator[]` の代わりに `at()` を使用するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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