Компілятори C та C ++ генеруватимуть попередження, коли ви порівнюєте підписані та непідписані типи; у вашому прикладі коду ви не можете зробити свою змінну циклу неподписаною, а компілятор генерує код без попереджень (за умови, що зазначені попередження були ввімкнені).
Звичайно, ви складаєтеся з попередженнями, повернутими до кінця, так?
І, чи замислювались ви над тим, щоб скласти "попередження як помилку", щоб зробити ще один крок далі?
Недоліком використання підписаних чисел є те, що існує спокуса перевантажити їх так, що, наприклад, значення 0-> n є вибором меню, а -1 означає, що нічого не вибрано - замість створення класу, який має дві змінні, одну до вкажіть, чи вибрано щось, а інше для зберігання того, що це вибір. Перш ніж ви це зрозумієте, ви всюди тестуєте на мінус, і компілятор скаржиться на те, як ви хочете порівняти виділення меню з кількістю вибраних вами меню - але це небезпечно, оскільки вони різних типів . Тож не робіть цього.