Эта линия
char chValue = max('a', '6'); // returns 'a'
int max(int nX, int nY)
{
return (nX > nY) ? nX : nY;
}
бросить письмо 'a'
к его эквивалентному числу ASCII тогда сравните это с целым числом?
Да потому, что max
это функция, которая занимает два int
в качестве аргументов, символ a
получите неявно преобразуется в int
а затем передать в качестве аргумента функции.
Не совсем.
Константы персонажа 'a'
а также '6'
имеют тип char
, который является интегральным типом. Oни уже обозначают целочисленные значения, и, предполагая реализацию на основе ASCII, они обозначают значения ASCII этих символов. Это определяется во время компиляции.
Ваш max
функция занимает два int
аргументы и возвращает int
результат. 'a'
а также '6'
являются неявно преобразуется от char
в int
, (Это преобразование дает значение с другим представлением, но с тем же значением.) явный преобразование, представленное оператором приведения в стиле C (как в (int)'a'
) или с одним из специфических для C ++ операторов приведения (как в static_cast<int>('a')
, поскольку int
а также char
оба являются целочисленными типами, здесь не требуется приведение.
(В C символьные константы имеют тип int
и не будет никаких преобразований вообще.)
int
результат, возвращаемый max()
затем неявно преобразуется из int
в char
и результат сохраняется в chValue
,
C ++ на самом деле не требует, чтобы символы кодировались в ASCII. Например, мэйнфреймы IBM используют другой набор символов, называемый EBCDIC. (В EBCDIC сравнение будет идти в другую сторону, и chValue
было бы '6'
скорее, чем 'a'
.)