如果声明是
int isdigit ( int c );
他们没有超负荷?当然他们的工作不正确。但为什么会有隐式类型的对话?
我认为它们应该是错误的,因为它的函数只能获取char或char代码(int),而不是其他类型。为什么C ++将double转换为int,如果没有丢失精度就不可能。
C ++是强类型语言。
请记住,这些函数在被逐步移植到C ++之前是C的一部分。因此,可以参考C给出更有启发性的答案。
“文件结束”指示符(EOF
)由C标准定义为不与任何8位char
冲突,因此它需要更宽的类型而且int
就足够了。大多数字符类型的函数都设计为与EOF
一起使用。
此外,所有单引号字符文字,如'a'
,'b'
等,都是C中的int
类型。(尽管它们是C ++中的char
类型)。
所以isdigit
&c。以int
为参数。它们返回一个int
,因为它是C中的本机条件类型。(注意,在C ++中,条件运算符返回bool
,但在C中它们返回int
。)
浮点参数的任何重载(函数重载当然不是C的一部分)都是没有意义的,因为字符编码总是用整数类型完成。