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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 17:26:14279ブラウズ

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 サイトの他の関連記事を参照してください。

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