我应该始终将适当的文字用于数字类型

Should I always use the appropriate literals for number types?

本文关键字:文字 用于 数字 类型 我应该      更新时间:2023-10-16

我经常在表达式中使用错误的文字,例如将浮子除以INT,这样:

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

我相信编译器将在这种情况下首先将int(2)转换为浮动,然后使用分区操作员。海湾合作委员会和Clang总是让这样的事情通过,但是Visual C 警告了隐性转换。所以我必须这样写:

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

让我想知道:我应该总是将适当的文字用于浮动,双,长等吗?我通常只要能逃脱它,我就会使用int文字,但是我不确定这实际上是一个好主意。

  • 这可能是造成细微错误的原因吗?
  • 这只是表达式或功能参数的问题吗?
  • 是否有警告或clang警告这种隐性转换的警告级别?
  • unsigned int,long int等怎么样?

您应始终明确指出您打算使用的字面类型。例如,当这种代码:

时,这将防止问题
float foo = 9.0f;
float bar = foo / 2;

更改以下,截断结果:

int foo = 9;
float bar = foo / 2;

当您涉及过载和模板时,功能参数也是一个问题。

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

对于适合int中的整数值,我通常不符合longunsigned的资格,因为对于细微的错误通常会少得多。

从来没有一个绝对正确的答案。谁将使用此代码,以及什么?这很重要。但是,尤其是与浮子有关的任何事情,最好养成准确指定所需操作的习惯。float*float在单精制中完成。双重精确完成的任何操作,2都会转换为双重精神,因此您在此处指定不同的操作。

这里最好的答案是每个计算机科学家对浮点算术的了解。我会说不要tl; dr,浮点没有简单的答案。