我经常在表达式中使用错误的文字,例如将浮点数除以一个整数,如下所示:

float f = read_f();
float g = f / 2;

我相信在这种情况下,编译器将首先将int文字(2)转换为float,然后应用除法运算符。 GCC和Clang总是让类似的东西通过,但是Visual C++警告有关隐式转换。所以我必须这样写:
float f = read_f();
float g = f / 2.0f;

这让我感到奇怪:我是否应该始终对浮点数, double 数,长整型等使用合适的文字?通常,只要可以使用int文字,就总是使用它,但是我不确定这是否是一个好主意。
  • 这可能是引起细微错误的原因吗?
  • 这仅是表达式问题还是函数参数问题?
  • 是否存在针对此类隐式转换的GCC或Clang警告级别?
  • unsigned int,long int等如何?
  • 最佳答案

    您应该始终明确指出要使用的文字类型。例如,当这样的代码时,这将防止出现问题:

    float foo = 9.0f;
    float bar = foo / 2;
    

    更改为以下内容,并截断结果:
    int foo = 9;
    float bar = foo / 2;
    

    当涉及重载和模板时,函数参数也是一个问题。

    我知道gcc具有-Wconversion,但我不记得它涵盖的所有内容。

    对于适合int的整数值,我通常不符合longunsigned的条件,因为那里出现细微错误的机会通常要少得多。

    关于c++ - 我应该始终对数字类型使用适当的文字吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13143468/

    10-10 21:21
    查看更多