4

我问是因为我使用的是 Box2D 库,它主要需要浮点参数。尽管我看到很多使用0.00f格式的示例代码,但我不太确定它与普通的旧0.00之间是否存在实际差异。

以后不附加额外的f会伤害自己吗?是速度问题吗?是否有某种内涵需要f加数而其他人不需要?

TL;DR:为什么我应该使用 0.00f 而不是 0.00?

4

6 回答 6

8

f后缀使其成为单精度(浮点)文字而不是双精度文字。这通常意味着 32 位而不是 64 位浮点数。

浮点常量默认为 double 类型。通过使用后缀 f 或 l(或 F 或 L — 后缀不区分大小写),可以分别将常量指定为 float 或 long double。

http://msdn.microsoft.com/en-us/library/tfh6f0w2(v=VS.100).aspx

于 2011-10-08T13:38:05.537 回答
5

它们是有区别的。2.00有类型double2.00f有类型float。确切的精度和格式含义取决于您的平台。使用其中一个是否会在您的代码中产生实际差异取决于使用它的上下文。

作为显式类型变量(基本数字类型)的初始化器,没有区别,但是在函数调用中使用时,它可能会影响使用哪个重载或模板特化。

auto 显然,当在使用类型说明符的声明中用作初始化器或用作 decltype-说明符中的表达式时,正在声明的对象的类型将受到影响。

decltype(2.00) x = 2.00f; // confusing
decltype(2.00f) y = 2.00; // also confusing

auto d = 2.00;
auto f = 2.00f;
于 2011-10-08T13:40:21.800 回答
4

只要您将它们分配给 a float,就绝对没有区别,因为该可以在所有数字类型中精确且正确地表示。

重要的区别是文字的类型,即doublefor 2.0floatfor2.0fintfor 2。所以它在参数类型推导方面有所不同:

void foo(int) { cure_cancer(); };
void foo(float) { wipe_hard_disk(); }
void foo(double) { exit(0); }

foo(2);
foo(2.0f);
foo(2.0);
于 2011-10-08T13:39:35.193 回答
2

的类型2.00double,的类型2.00ffloat

后缀f将文字2.00转换为浮点类型,从而降低其精度。否则,字面量就是double类型。

于 2011-10-08T13:38:46.147 回答
2

默认假设是double。指定f后缀确保它将被解释为float

于 2011-10-08T13:40:18.530 回答
1
于 2021-07-30T07:14:02.743 回答