C Vector での配列アクセスの境界チェックのためのコンパイラ オプション
C 標準ライブラリは、std::vector 型、つまり動的配列を提供します。メモリの安全性を確保します。ただし、operator[] を使用して要素にアクセスすると、インデックスが範囲外の場合に未定義の動作が発生するという固有のリスクが伴います。
デバッグ モードで境界チェックを有効にする
境界を有効にするにはVisual Studio で Operator[] をチェックすると、マクロ _SECURE_SCL がゼロ以外の値に定義されている可能性があります。これにより、実行時に範囲チェックが強制され、無効なインデックスにアクセスすると std::out_of_range 例外が発生します。
リリース モードで境界チェックを無効にする
パフォーマンスを最適化するにはリリース ビルドでは、_SECURE_SCL を 0 に設定することで境界チェックを無効にできます。これにより、範囲検証に関連する実行時のオーバーヘッドが排除されます。
例:
<code class="cpp">// Enable bounds checking in debug mode (assuming Visual Studio 2008 or earlier) #ifdef _DEBUG #define _SECURE_SCL 1 #endif // ... std::vector<std::vector<int>> v; v[0][1]; // Throws `std::out_of_range` if i or j is out of bounds</code>
注:
以上がC で `std::vector` の境界チェックを有効または無効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。