我应该明确截断?

时间:2014-01-08 09:54:08

标签: c++

鉴于这个起点:

double y = readDoubleValue();

C ++之间是否有任何显着差异:

int x = y;

int x = trunc(y);

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

参考: Is there a trunc function in C++?

2 个答案:

答案 0 :(得分:5)

只需使用static_cast<int>(y)即可获得您正在寻找的所有好处:

  1. 截断
  2. 铸造
  3. 为了清晰明确的转换。
  4. 我不会使用trunc()

    的原因
    1. 这不常见,也许其他人阅读你的代码将不得不审查文档(这就是我做的原因,但同样,我不是专家)
    2. 无论如何,你仍在使用隐式转换,trunc()不返回int。
    3. 对我而言,这是不够明确的,在阅读完你的代码和文档后我问自己:“他是不是想要转换为int,或者你只是想要一个没有分数部分的浮动”
    4. 我可以想到一个或两个我希望摆脱小数部分的情况,但我仍然希望变量具有类型float有几个原因,例如,我想要操作{{1}保存分数部分。 所以我仍然怀疑你的意图,也许你不是指隐含的转换。

      您可以在其旁边添加一些评论x + 0.1f
      这也将为您提供所需的清晰度。

答案 1 :(得分:0)

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

int x = y;在这里你说你正在为int变量分配一些东西

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

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

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