4 ms·
As far as I am aware, the standard doesn't mandate bounds checking for std::vector::operator[] and probably never will for backwards compatibility reasons. Most
by Calavar 2y ago
As far as I am aware, the standard doesn't mandate bounds checking for std::vector::operator[] and probably never will for backwards compatibility reasons. Most standard library implementations have opt-out std::vector[] bounds checking in unoptimized builds, but not in optimized builds.
I tried a toy example with GCC [1], Clang [2], and MSVC [3], and none of them emit bounds checks with basic optimization flags.
[1] https://godbolt.org/z/W5e3n5oWM https://godbolt.org/z/W5e3n5oWM
[2] https://godbolt.org/z/Pe8nPPvEd https://godbolt.org/z/Pe8nPPvEd
[3] https://godbolt.org/z/YTdv3nabn https://godbolt.org/z/YTdv3nabn
- TinkersW 2y agoAs I said you need the correct flag set.. MSVC use _CONTAINER_DEBUG_LEVEL=1 and it can be used in release. They have had this feature since 2010 or so, though the flag name has changed.
- pjmlp 2y agoThe correct name is _ITERATOR_DEBUG_LEVEL.
- pjmlp 2y agoAdd a "#define _ITERATOR_DEBUG_LEVEL 1" on top for VC++.