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