文字操作数的类型

kay*_*kun 1 c

我不认为大多数编译器都会关心,例如,你不将f附加到float类型的变量.但仅仅因为我想尽可能明确和准确,我想表达正确的类型.

两个不同类型的文字操作数的结果类型是什么,还是取决于具体情况?例如:

int i=1.0f/1;
float f=1.0f/1;
Run Code Online (Sandbox Code Playgroud)

编译器不会在这两个实例中抱怨,是因为它对文字类型的容忍视图,还是因为操作结果的类型总是根据上下文转换?

Pas*_*uoq 5

首先,编译器确实关心f后缀.1.0是双重的.1.0f是一个浮动.例如:

printf("%.15f %.15f\n", 0.1f, 0.1);
Run Code Online (Sandbox Code Playgroud)

产生0.100000001490116 0.100000000000000(请注意,第二个数字不是真正的0.1,而不是第一个,它就更接近它).

这不仅可以确定哪些数字可以表示也可以不表示,而且还可以确定此常量所涉及的操作类型.例如:

printf("%.15f %.15f\n", 1.0f/10.0f, 1.0/10.0);
Run Code Online (Sandbox Code Playgroud)

产生与以前相同的输出.这里需要注意的是,1和10都可以完全float表现出来double.我们所看到的不是在字面上进行舍入,而是根据操作数的类型决定操作的类型.

编译器对您的示例并不宽容.它们严格遵守相关标准规则,尤其是6.3.1.4和6.3.1.5节.