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