Gavin Lambert wrote:
In this case for any non-massive array you're fairly safe (esp. when someone fixes the call site) with a simple:
assert(i < size());
That is correct. If you have an upper bound, `i < n` for unsigned `i` is equivalent to `i >= 0 && i < n` with a signed `i`, so in this specific case you can use either. Signed is still preferable though because it's less surprising. `x > -1` gives you the normal answer, for instance. But, you'll say, this will be a warning. Well yes, this specific case will be, but not all will. Some signed/unsigned mismatches don't warn on purpose because there are too many false positives (https://godbolt.org/z/c1rzjS), and in some cases, such as with the difference between (a-b)/(c-d) and (b-a)/(d-c), unsigned finds a way to ruin your day without any signed/unsigned mismatches at all. So it's a long-standing guideline to never use `unsigned`, except for bitwise operations and modular arithmetic. For numbers, signed is the way to go.