Здравствуйте, eao197, Вы писали:
E>Еще одна статья из The Artima C++ Source: Built-in Type Safety?.
Вкратце опишу первую ошибку ("defect one") для тех, кто не читал статью. Есть целое число от 0 до 100 ("signal quality"). Поначалу оно хранилось в переменной типа int:
/**
* Typedef used to represent signal quality as a percentage.
* 100 represents perfect signal, 0 no signal.
*/
typedef int Signal;
Потом кто-то решил заменить int на unsigned ("someone decided that an unsigned was more appropriate for a value in the range [0, 100]"):
/**
* Typedef used to represent signal quality as a percentage.
* 100 represents perfect signal, 0 no signal.
*/
typedef unsigned Signal;
Ну и получили ошибку: "So, 10u — 20 is a very big unsigned number." Автор (Thomas Guest) делает из этого четрые вывода ("lessons learned"), но не делает главного: избегайте беззнаковой арифметики.