c ++中的隐式铸造字母

时间:2016-04-01 15:00:25

标签: c++ letters implicit-cast

这行吗

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

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

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

2 个答案:

答案 0 :(得分:4)

是的,因为max是一个以int为参数的函数,所以char a会将implicitly converted变为int然后获取作为函数的参数传递。

答案 1 :(得分:3)

不完全是。

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

您的max函数需要两个int个参数并返回int个结果。 'a''6' 从<{1}}隐式转换为char。 (此转换产生的值具有不同的表示但具有相同的值。)强制转换是显式转换,用C样式的强制转换运算符(如int中所示)或使用一个特定于C ++的转换运算符(如(int)'a'中所示。由于static_cast<int>('a')int都是整数类型,因此这里不需要强制转换。

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

int返回的int结果会隐式转换为max()int,结果存储在char

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