为什么 isalpha、isdigit、isspace 函数得到 float 类型?

Why isalpha, isdigit, isspace function get float types?

如果声明是

int isdigit ( int c );

他们是不是超载了? 当然他们工作不正确。但是为什么会有隐式对话呢?

我觉得应该是错误,因为它的函数只能获取char,或者char code(int),不能获取其他类型。 为什么 C++ 将 double 转换为 int,在不丢失精度的情况下是不可能的。

C++ 是强类型语言。

请记住,这些函数在逐字移植到 C++ 之前是 C 的一部分。因此可以参考C给出更有指导意义的答案。

"End Of File" 指示器 (EOF) 由 C 标准定义为不与任何 8 位 char 冲突,因此它需要比它更宽的类型和一个 int 就足够了。大多数字符型函数都设计为以 EOF 作为输入。

此外,所有单引号字符文字,如'a''b'等,在C中都是int类型。(尽管它们在C++中是char类型)。

所以 isdigit &c。以 int 作为参数。它们 return 一个 int 因为那是 C 中的原生条件类型。(请注意,在 C++ 中,条件运算符 return bool,但在 C 中它们 return int.)

浮点参数的任何重载(函数重载当然不是 C 的一部分)都是毫无意义的,因为字符编码总是使用整数类型完成的。