代码之家  ›  专栏  ›  技术社区  ›  Дима Соколов

为什么isalpha、isdigit、isspace函数获取浮点类型?

  •  -1
  • Дима Соколов  · 技术社区  · 7 年前

    如果声明为

    int isdigit ( int c );
    

    他们没有超载吗? 当然,它们工作不正确。但为什么会有隐式对话呢?

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

    C++是一种强大的类型化语言。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Bathsheba    7 年前

    请记住,这些函数在被逐字移植到C++之前是C的一部分。因此,可以参考C给出更具启发性的答案。

    “文件结束”指示器( EOF )由C标准定义为不与任何8位冲突 char ,所以它需要一个更宽的类型 int 就足够了。大多数字符类型函数的设计都是为了 EOF公司 作为输入。

    此外,所有单引号字符文字 'a' , 'b' 等是 内景 C.中的类型(尽管 烧焦 C++中的类型)。

    所以 isdigit &c、 采取行动 内景 作为参数。他们返回 内景 因为这是C中的本机条件类型。(注意,在C++中,条件运算符返回 bool ,但在C中返回 内景 .)

    浮点参数的任何重载(函数重载当然不是C的一部分)都是毫无意义的,因为字符编码总是使用整数类型完成的。