Неявное приведение букв в переполнении стека

Эта линия

char chValue = max('a', '6'); // returns 'a'

int max(int nX, int nY)
{
return (nX > nY) ? nX : nY;
}

бросить письмо 'a' к его эквивалентному числу ASCII тогда сравните это с целым числом?

1

Решение

Да потому, что max это функция, которая занимает два intв качестве аргументов, символ a получите неявно преобразуется в int а затем передать в качестве аргумента функции.

4

Другие решения

Не совсем.

Константы персонажа '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'.)

3

По вопросам рекламы [email protected]