Вероятно, ваш начальник пытался вести обратный отсчет от Mнуля до нуля включительно, выполняя определенные действия с каждым числом.
К сожалению, есть крайний случай, когда это действительно даст вам бесконечный цикл, в котором Mмаксимальное значениеsize_t значение, которое вы можете иметь. И хотя четко определено, что будет делать беззнаковое значение, когда вы уменьшите его с нуля, я утверждаю, что сам код является примером небрежного мышления, тем более, что существует вполне жизнеспособное решение без недостатков попытки ваших боссов.
Этим более безопасным вариантом (и, на мой взгляд, более читабельным, при сохранении жестких ограничений по объему) будет:
{
std::size_t j = M;
do {
doSomethingWith(j);
} while (j-- != 0);
}
В качестве примера см. Следующий код:
#include <iostream>
#include <cstdint>
#include <climits>
int main (void) {
uint32_t quant = 0;
unsigned short us = USHRT_MAX;
std::cout << "Starting at " << us;
do {
quant++;
} while (us-- != 0);
std::cout << ", we would loop " << quant << " times.\n";
return 0;
}
Это в основном то же самое с объектом, unsigned shortи вы можете видеть, что он обрабатывает каждое отдельное значение:
Starting at 65535, we would loop 65536 times.
Замена do..whileцикла в приведенном выше коде тем, что в основном сделал ваш босс, приведет к бесконечному циклу. Попробуйте и посмотрите:
for (unsigned int us2 = us; us2 <= us; --us2) {
quant++;
}
size_tбеззнаковый, поэтому гарантируется возврат к максимальному значению при попытке отказаться от нуля, завершая цикл. Тем не менее, все еще ужасный код.