[] 演算子を使用した境界外アクセスで C ベクトル エラーが発生しないのはなぜですか?
C ベクトルを使用する場合、奇妙な動作に直面する可能性があります。角括弧演算子 ([ ]) を使用してサイズを超える要素にアクセスしようとしても、エラーは発生しません。これは、境界チェックを実行する at() メンバー関数とは異なります。
例:
次のコードを考えてみましょう:
std::vector<double> face; face.push_back(2.3); // Insert 1st element face.push_back(4.5); // Insert 2nd element face.push_back(6.7); // Insert 3rd element face.push_back(8.9); // Insert 4th element face.push_back(11.1); // Insert 5th element face.push_back(13.3); // Insert 6th element std::cout << face.size() << std::endl; // Prints 6 std::cout << face[6] << std::endl; // Prints some number without an error
説明:
std::vector クラスは、 at() メンバー関数は、ベクトルの境界内の要素に安全にアクセスします。有効な範囲外のインデックスが使用されている場合、at() は std::out_of_range 例外をスローします。
対照的に、[] 演算子は境界チェックを実行しません。 [] を使用してベクトルのサイズを超える要素にアクセスしようとすると、未定義の結果が生成されます。実際には、これにより通常、ベクターに属さないメモリにアクセスすることになり、予期しない動作やクラッシュが発生する可能性があります。
推奨事項:
このような事態を回避するには問題がある場合は、ベクトルの境界内の要素にアクセスするには at() メンバー関数を使用することを強くお勧めします。これにより、無効なインデックスにアクセスしようとしたときにエラーがスローされます。
以上がC Vector の `[]` 演算子が境界外アクセスでエラーをスローしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。