ホームページ > バックエンド開発 > C++ > Const std::map アクセス: `operator[]` と `at()` – どちらを使用する必要がありますか?

Const std::map アクセス: `operator[]` と `at()` – どちらを使用する必要がありますか?

Mary-Kate Olsen
リリース: 2024-12-03 17:26:14
オリジナル
277 人が閲覧しました

Const std::map Access: `operator[]` vs. `at()` – Which Should You Use?

Operator[] と at() を使用した定数マップ内の要素へのアクセス

定数 std::map を操作する場合、要素で演算子[]を使用すると問題が発生する可能性があります。この方法は直感的に使用できるように思えますが、コンパイルに失敗します。これは、キーが存在しない場合に、operator[] がマップを変更する非 const マップを期待しているためです。

ただし、代わりのメソッド at() があり、これは特に C 11 で導入されました。この目的。 Operator[] とは異なり、at() は、キーが存在しない場合、デフォルトの構築要素を挿入するのではなく、std::out_of_range 例外をスローします。

この動作は、定数マップの概念とよく一致しています。 at() の const オーバーロードを定義することにより、意図しない変更が行われる可能性がなく、要素に安全かつ効率的にアクセスできるようになります。

説明のために、次の例を考えてみましょう。

#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; // works
    std::cout << B[3] << std::endl;    // cannot access (compile error)
}
ログイン後にコピー

このシナリオでは、B で Operator[] を使用すると、コンパイル時エラーが発生します。これは、B が const マップであり、変更できないためです。ただし、at() メソッドは、マップの const の性質を認識し、キーが存在しない場合に例外をスローするため、完全に機能します。

したがって、const std::map 内の要素にアクセスする場合は、 at() は、意図しない変更を防ぐために推奨される安全なアプローチです。この機能の詳細については、C 11 標準または std::map クラスに関連するドキュメントを参照してください。

以上がConst std::map アクセス: `operator[]` と `at()` – どちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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