Hi,
Something I forgot to add earlier, the reason why the loop continues:
In the expression
Xdata.size()-B
B
is promoted from
int
to
std::size_t
If the expression is equal to zero, then the condition is true. In the comparison between
i
and the expression,
i
is also implicitly promoted to
std::size_t
. When
i
is decremented it would have a value of say 2
64 - 1 (if
std::size_t
is really a
unsigned long long
*), because
std::size_t
can't have negative values, so the loop continues.
* The type of
std::size_t
is often set to the largest unsigned type the system has, but this is not guaranteed by the standard.
So this is why it is problematic to mix signed and unsigned types when doing arithmetic.
Also there should have been a compiler warning about this, if one has the warnings turned on. Always have compiler warnings turned on to the highest level one can get away with. It's worth reading the manual to turn on specific warnings. With g++ and clang++ there quite a few warnings
not turned on by
-Wall -Wextra -pedantic
GeorgeP wrote: |
---|
C++20 introduced the reverse range adaptor. |
Ah cool, thanks George. There is so much stuff in the ranges library, awesome.