我应该明确截断吗
Should I explicitly trunc?
本文关键字:我应该 更新时间:2023-10-16
给定此起点:
double y = readDoubleValue();
在C++中,之间是否有任何显著差异
int x = y;
和
int x = trunc(y);
我应该更喜欢哪一个?如果其他人(包括我未来的自己:)阅读了我的代码,在我看来,第二个更明确的事实是,我确切地知道自己在做什么,但它需要包含库。
参考:C++中有trunk函数吗?
只需使用static_cast<int>(y)
即可获得您想要的所有好处:
- 截断
- 铸件
- 为清晰起见,显式转换
我不使用trunc()
的原因
- 这并不常见,可能其他阅读您代码的人必须查看文档(这就是我这样做的原因,但我又不是专家)
- 无论如何,您仍在使用隐式转换,
trunc()
不会返回int - 对我来说,这还不够明确,在阅读了你的代码和文档后,我问自己:"他是有意将类型转换为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
。可能是偏好,对我来说,在这种用例中它实际上是一种混淆。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该删除矢量<short>吗?
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 我应该避免多重实现继承吗
- 为了方便起见,我应该避免公开私有字段变量吗
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 违反const正确性:我应该现实地期待什么问题
- 我应该如何表示我拥有的连续元素序列?
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 我应该如何捕捉out_of_range异常?
- 我应该声明所有不抛出 noexexcept 的成员/函数吗?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?