Wouldn't it be better to write
for (size_t i = size; i > 0; i--) { // ... }
and use i-1 inside the loop instead of using underflow?
for (size_t i = size; i > 0; i--) { // ... }
and use i-1 inside the loop instead of using underflow?
Problem 1:
If i is used multiple times inside the loop, then you might need to make a temporary variable for it, making it confusing:
for (size_t i_plus_one = size; i_plus_one > 0; i_plus_one--) {
size_t i = i_plus_one - 1;
f(i);
g(i);
h(i);
...
(The alternative is a bunch of i-1 all over the place, which is also confusing.)
Problem 2:
If operations inside the loop is short, then the extra "i-1" arithmetic could result in unacceptable performance penalties.