C ++中的隐式铸造字母

Implicit casting letters in c++

是否这条线

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

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

将字母 'a' 转换为其 ASCII 等效数字,然后将其与整数进行比较?

是的,因为 max 是一个接受两个 int 作为参数的函数,字符 aimplicitly converted 转换为 int 并且然后作为函数的参数传递。

不完全是。

字符常量'a''6'的类型是char,是整型。它们 已经 表示整数值,假设基于 ASCII 的实现,它们表示这些字符的 ASCII 值。这是在编译时确定的。

您的 max 函数接受两个 int 参数和 returns 一个 int 结果。 'a''6'char 隐式转换int。 (此转换产生具有不同表示但相同值的值。)强制转换是 显式 转换,用 C 风格的强制转换运算符表示(如 (int)'a')或者使用特定于 C++ 的转换运算符之一(如 static_cast<int>('a')。由于 intchar 都是整数类型,因此此处不需要转换。

(在C中,字符常量是int类型,根本不会有任何转换。)

然后将max()返回的int结果从int隐式转换为char,并将结果存储在chValue中。

C++ 实际上并不要求字符以 ASCII 编码。例如,IBM 大型机使用称为 EBCDIC 的不同字符集。 (在 EBCDIC 中,比较会以另一种方式进行,chValue 将是 '6' 而不是 'a'。)