When I do something like this:
int my_array[5] = {1, 2, 3, 4, 5};
for (int &x : my_array) {
x *= 2;
}
C++11 obviously knows that my array only has 5 elements. Is this information stored somewhere in the my_array object?
If so, is there any good reason why it is not made available to me as a developer (or is it?!?!?)? It seems that a lot of the world’s problems would be solved if C++ devs always knew the bounds of the arrays they’re dealing with.
This is simply something that the language requires to work, and the compiler must implement. Obviously the complete type of
my_arrayisint[5](i.e. the size is part of the type), so this information is readily available.Contrary to popular belief, there is no use of the free
std::begin()/std::end()functions in play, although those would naively seem to be able to do the trick (but there’s a catch involving ADL that would break this approach).