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
作为参数的函数,字符 a
将 implicitly converted 转换为 int
并且然后作为函数的参数传递。
不完全是。
字符常量'a'
和'6'
的类型是char
,是整型。它们 已经 表示整数值,假设基于 ASCII 的实现,它们表示这些字符的 ASCII 值。这是在编译时确定的。
您的 max
函数接受两个 int
参数和 returns 一个 int
结果。 'a'
和 '6'
从 char
隐式转换 到 int
。 (此转换产生具有不同表示但相同值的值。)强制转换是 显式 转换,用 C 风格的强制转换运算符表示(如 (int)'a'
)或者使用特定于 C++ 的转换运算符之一(如 static_cast<int>('a')
。由于 int
和 char
都是整数类型,因此此处不需要转换。
(在C中,字符常量是int
类型,根本不会有任何转换。)
然后将max()
返回的int
结果从int
隐式转换为char
,并将结果存储在chValue
中。
C++ 实际上并不要求字符以 ASCII 编码。例如,IBM 大型机使用称为 EBCDIC 的不同字符集。 (在 EBCDIC 中,比较会以另一种方式进行,chValue
将是 '6'
而不是 'a'
。)
是否这条线
char chValue = max('a', '6'); // returns 'a'
int max(int nX, int nY)
{
return (nX > nY) ? nX : nY;
}
将字母 'a'
转换为其 ASCII 等效数字,然后将其与整数进行比较?
是的,因为 max
是一个接受两个 int
作为参数的函数,字符 a
将 implicitly converted 转换为 int
并且然后作为函数的参数传递。
不完全是。
字符常量'a'
和'6'
的类型是char
,是整型。它们 已经 表示整数值,假设基于 ASCII 的实现,它们表示这些字符的 ASCII 值。这是在编译时确定的。
您的 max
函数接受两个 int
参数和 returns 一个 int
结果。 'a'
和 '6'
从 char
隐式转换 到 int
。 (此转换产生具有不同表示但相同值的值。)强制转换是 显式 转换,用 C 风格的强制转换运算符表示(如 (int)'a'
)或者使用特定于 C++ 的转换运算符之一(如 static_cast<int>('a')
。由于 int
和 char
都是整数类型,因此此处不需要转换。
(在C中,字符常量是int
类型,根本不会有任何转换。)
然后将max()
返回的int
结果从int
隐式转换为char
,并将结果存储在chValue
中。
C++ 实际上并不要求字符以 ASCII 编码。例如,IBM 大型机使用称为 EBCDIC 的不同字符集。 (在 EBCDIC 中,比较会以另一种方式进行,chValue
将是 '6'
而不是 'a'
。)