为什么 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 的一部分)都是毫无意义的,因为字符编码总是使用整数类型完成的。
如果声明是
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 的一部分)都是毫无意义的,因为字符编码总是使用整数类型完成的。