为什么不能在整数后直接使用“f”字面量?

GxD*_*xDD 0 c++ floating-point int

我正在编写 C++ 代码。我发现“奇怪”的是你不能使用3f,因为 Visual Studio 给出了一个错误“找不到文字运算符”,你只能使用3.f.

为什么不能直接在数字后使用 'f' 文字,而不使用点分隔符 ( 3f)?

gez*_*eza 5

以下是标准中的规则:

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
Run Code Online (Sandbox Code Playgroud)

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

K&R 一书将其解释为:

浮点常量包含小数点 ( 123.4 ) 或指数 ( 1e-2 ) 或两者;它们的类型是 double ,除非有后缀。后缀 f 或 F 表示浮点常数;l 或 L 表示 long double 。

所以,想法是,forl修改一个已经浮点数的常量 ( double) 以具有floator的类型long double。后缀本身不会将非浮点常量转换为浮点常量。