为什么不能在整数后直接使用'f'后缀?



在编写C++应用程序时,我发现我不能使用f后缀(例如3f(,因为Visual Studio向我显示了以下错误:"未找到文字运算符";。当然,当我使用.f后缀(例如3.f(时,问题就消失了。为什么?

以下是标准中的规则:

floating-point-literal:
decimal-floating-point-literal
hexadecimal-floating-point-literal
decimal-floating-point-literal:
fractional-constant exponent-part-opt floating-point-suffix-opt
digit-sequence exponent-part floating-point-suffix-opt
fractional-constant:
digit-sequence-opt . digit-sequence
digit-sequence .
exponent-part:
e sign-opt digit-sequence
E sign-opt digit-sequence
floating-point-suffix: one of
f  l  F  L

如您所见,如果没有指数部分,.必须始终包含在十进制浮点常量中。

K&R书将其解释为:

浮点常量包含小数点(123.4(或指数(1e-2(,或两者都包含;除非加后缀,否则它们的类型为double。后缀f或f表示浮点常量;l或l表示长双。

因此,我们的想法是,fl将已经存在的浮点常量(double(修改为floatlong double的类型。后缀本身不会使非浮点常量变为浮点常量。

为什么不能在整数后面直接使用'f'文字?

如果允许f后缀在形成整数的文本之后成为浮点,则十六进制整数/浮点将出现问题

0x1.23f  // this is a float
0x1p23f  // this is a float
0x123f   // If this now a float?  No, it remains an integer.

f后缀从默认值double更改浮点文字的类型。在C中,fF后缀不会使浮点文字,而是使浮点常量

最新更新