Си++/Основные отличия Си++ от Си: различия между версиями

Содержимое удалено Содержимое добавлено
оформление - ему было очень плохо
→‎Правила перегрузки: - моноширинный шрифт протёк
Строка 1059:
Для вас <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> — для символов, а <tt>signed</tt> или <tt>unsigned char</tt> — для целых. В C++ в отличие от C все три варианта <tt>char</tt> — с указанием той или иной знаковости и без оной — являются тремя разными типами. Этим он отличается от остальных целочисленных типов, каковые существуют только в двух вариантах. Например <tt>long</tt> и <tt>signed long</tt> — это один и тот же тип.)
 
Также стоит остерегаться неоднозначности другого вида. Смотрим пример: