“2.00”和“2.00f”之间是否存在功能差异?

时间:2011-10-08 13:34:36

标签: c++ floating-point box2d

我问,因为我使用的是Box2D库,它主要调用float参数。虽然我看到很多使用的示例代码   0.00f 格式,我不太确定它与普通旧 0.00 之间是否存在实际差异。我是否会因为没有追加额外的 f 而伤害自己?这是速度的事吗?当其他人不这样做时,是否存在需要 f 加数的某种内涵?

TL;博士?我为什么要使用0.00f而不是0.00?

6 个答案:

答案 0 :(得分:7)

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

  

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

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

答案 1 :(得分:5)

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

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

显然,当在使用auto 类型说明符的声明中用作初始值设定项或在decltype-specifier中用作表达式时,声明的对象的类型将受到影响

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

auto d = 2.00;
auto f = 2.00f;

答案 2 :(得分:4)

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

重要区别在于文字的类型double2.0float2.0fint } 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);

答案 3 :(得分:2)

2.00的类型为double2.00f的类型为float

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

答案 4 :(得分:2)

默认假设为double。指定f后缀可确保将其解释为float

答案 5 :(得分:0)