作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚了解到除法运算符的舍入行为在 C++ 11 之前没有定义。解决方案是使用 std::div
。 ( Safely round to next smaller multiple )
我的程序总是假定 /
只会截断小数部分。作为快速修复,我想包含一个断言,这样如果有人在具有不同舍入行为的平台上进行编译,我至少会得到一个错误。
assert(3/2 == 1)
或 static_assert(3/2 == 1)
会完成这项工作吗?或者这些常量是否会被编译器内部的算法优化掉,这可能与机器实际做的不同?
最佳答案
“我刚刚了解到除法运算符的舍入行为在 C++ 11 之前没有定义”。如果两个参数都是正整数,则不是这样。
3/2 == 1
是一个编译时常量表达式,值为 true
,因此代码将编译为 assert(true)
.
考虑使用 static_assert
进行编译时断言。
关于c++ - 断言(3/2 == 1): Does this work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958148/
我是一名优秀的程序员,十分优秀!