Си++: различия между версиями
Содержимое удалено Содержимое добавлено
Qraizer (обсуждение | вклад) |
Qraizer (обсуждение | вклад) |
||
Строка 1109:
Для вас <tt>byte</tt> и <tt>char</tt> — разные вещи, однако для компилятора это одно и то же. Поэтому, хотя они и выглядят по-разному, на самом деле это одинаковые типы. Перегруженные функции не могут отличаться ''только'' тем, что аргумент одной имеет тип <tt>byte</tt>, а соответствующий аргумент другой — тип <tt>char</tt>.
(Лирическое отступление: если вы захотите повторить трюк с «<tt>typedef … byte<tt>» в своей программе, то нужно писать «<tt>typedef unsigned char byte</tt>», ибо под байтом обычно разумеют число от 0 до 255, а не число от -128 до 127. Кстати, если вы работаете с русскими символами, то при использовании типа «<tt>char</tt>» они будут иметь ''отрицательные'' коды, так что имеет смысл ''всегда'' писать «<tt>unsigned char</tt>» вместо просто «<tt>char</tt>». Кроме того, стандарт Си++ не определяет, будет ли <tt>char</tt> знаковым или нет — это отдано на откуп реализации. Если наличие или отсутствие знака важно (например, при конвертации в <tt>int</tt> или сравнении больше/меньше), лучше указывать это явно. Вообще, лучше запомнить и никогда не поступать наоборот: <tt>char</tt>
Также стоит остерегаться неоднозначности другого вида. Смотрим пример:
|