ホームページ >バックエンド開発 >C++ >`std::vector` の `operator[]` がエラーなしで境界外アクセスを許可するのはなぜですか?

`std::vector` の `operator[]` がエラーなしで境界外アクセスを許可するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-07 11:06:13899ブラウズ

Why Does `std::vector`'s `operator[]` Allow Out-of-Bounds Access Without Error?

std::Vector の境界外にもかかわらずエラーなしのアクセス

std::vector で、operator[] を使用したアクセスはエラーを引き起こしませんインデックスが範囲外の場合でもレポートします。これにより、予期しない結果が生じる可能性があります。

次の例を考えてみましょう。

struct Element
{
    std::vector<double> face;
};

int main()
{
    Element elm;

    // Insert 6 elements into elm.face
    for (int i = 0; i < 6; i++) elm.face.push_back(i);

    std::cout << elm.face.size() << std::endl; // Prints 6
    std::cout << elm.face[6] << std::endl; // Prints an arbitrary number
}

示されているように、ベクトル サイズは 6 ですが、存在しないインデックス elm.face[6] にアクセスすると、 -エラー応答。この結果は未定義の動作であり、返される値はプラットフォームやメモリ管理によって異なります。

対照的に、at() を使用して要素にアクセスすると、境界チェックが実行され、境界チェックが実行され、例外 (std::out_of_range) がスローされます。インデックスが範囲外です。したがって、境界チェックが必要な場合は、operator[] の代わりに at() を使用することをお勧めします。

以上が`std::vector` の `operator[]` がエラーなしで境界外アクセスを許可するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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