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

问题描述 投票:-1回答:1

如果声明是

int isdigit ( int c );

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

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

C ++是强类型语言。

c++ std
1个回答
2
投票

请记住,这些函数在被逐步移植到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的一部分)都是没有意义的,因为字符编码总是用整数类型完成。

© www.soinside.com 2019 - 2024. All rights reserved.