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

时间:2017-12-27 09:43:27

标签: c++ std

如果声明是

int isdigit ( int c );

他们没有超负荷? 当然他们的工作不正确。但为什么存在隐式类型对话?

我认为它们应该是错误的,因为它的函数只能获取char或char代码(int),而不是其他类型。 为什么C ++会将double转换为int,如果没有丢失精度就不可能。

C ++是强类型语言。

1 个答案:

答案 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的一部分)都是没有意义的,因为字符编码总是用整数类型完成。