代码之家  ›  专栏  ›  技术社区  ›  int3

C++自动将conts int转换为浮点数吗?

  •  0
  • int3  · 技术社区  · 16 年前

    我知道将int转换为float(反之亦然)相当昂贵。但是,编译器是否会在编译时自动为代码中的常量执行此操作?例如,两者之间有什么区别吗

    float y = 123;
    float x = 1 / y;
    

    float y = 123.f;
    float x = 1.f / y;
    

    我使用的是gcc(因为答案可能是特定于编译器的)

    此外,任何指向编译器通常可以优化和不能优化的内容列表的指针都将受到欢迎。谢谢

    4 回复  |  直到 16 年前
        1
  •  2
  •   Rob Kennedy    16 年前

    这不是一个优化。关闭优化不会使编译器在可执行代码中包含int到float的转换,除非它是一个 非常 执行质量差。

    这也不是为了安全。编译器从不做任何“以防万一”的操作数恰好是不同类型的操作数。编译器知道代码中所有内容的类型。如果更改变量的类型,使用该变量的所有内容都会重新编译;编译器不会试图保持所有其他内容不变,而只是更新更改的部分。

        2
  •  0
  •   sharptooth    16 年前

    是的,确实如此,所以这两个片段是等价的。唯一重要的是指定给的变量的类型。

        3
  •  0
  •   Mark Bessey    16 年前

    这个 浮动y=123.f 浮动x=1/y 浮动x=1.f/y 如果y是一个整数,实际上会生成不同的结果。

    它确实依赖于编译器——有些编译器可能会存储一个常量int,并在每次分配给浮点变量时将其转换。

        4
  •  0
  •   Razzupaltuff    16 年前

    有些情况下,编译器会将float强制转换为int,例如。

    float f;
    if (f > 1) ...
    

    if (int (f) > 1) ...