我应该明确截断吗

Should I explicitly trunc?

本文关键字:我应该      更新时间:2023-10-16

给定此起点:

double y = readDoubleValue();

在C++中,之间是否有任何显著差异

int x = y;

int x = trunc(y);

我应该更喜欢哪一个?如果其他人(包括我未来的自己:)阅读了我的代码,在我看来,第二个更明确的事实是,我确切地知道自己在做什么,但它需要包含库。

参考:C++中有trunk函数吗?

只需使用static_cast<int>(y)即可获得您想要的所有好处:

  1. 截断
  2. 铸件
  3. 为清晰起见,显式转换

我不使用trunc()的原因

  1. 这并不常见,可能其他阅读您代码的人必须查看文档(这就是我这样做的原因,但我又不是专家)
  2. 无论如何,您仍在使用隐式转换,trunc()不会返回int
  3. 对我来说,这还不够明确,在阅读了你的代码和文档后,我问自己:"他是有意将类型转换为int,还是你只是想要一个没有fraction部分的float?">

我可以想到一两种情况,我想去掉分数部分,但出于几个原因,我仍然希望变量的类型为float,比如,我希望操作x + 0.1f保存分数部分。所以我仍然会怀疑你的意图,也许你不是指隐含的转变。

或者您可以在它旁边放一个小注释int x = y; // yes, I know what I'm doing
这也将为您提供所需的清晰度。

IMO你不应该。truncate是为浮点类型定义的函数。它不会将类型更改为整型。

int x = y;这里你说你给一个int变量赋值

int x = trunc(y);这里你说你出于任何原因放弃了小数部分,然后转换

在我看来,用例非常不同。

为什么我不鼓励在转换前使用trunc。可能是偏好,对我来说,在这种用例中它实际上是一种混淆。