我经常在表达式中使用错误的文字,例如将浮点数除以一个整数,如下所示:
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文字,就总是使用它,但是我不确定这是否是一个好主意。
最佳答案
您应该始终明确指出要使用的文字类型。例如,当这样的代码时,这将防止出现问题:
float foo = 9.0f;
float bar = foo / 2;
更改为以下内容,并截断结果:
int foo = 9;
float bar = foo / 2;
当涉及重载和模板时,函数参数也是一个问题。
我知道gcc具有
-Wconversion
,但我不记得它涵盖的所有内容。对于适合
int
的整数值,我通常不符合long
或unsigned
的条件,因为那里出现细微错误的机会通常要少得多。关于c++ - 我应该始终对数字类型使用适当的文字吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13143468/