断言(3/2 == 1):这有用吗?

时间:2015-11-27 13:09:50

标签: c++ optimization assert

我刚刚了解到在C ++ 11之前没有定义除法运算符的舍入行为。解决方案是使用std::div。 (Safely round to next smaller multiple

我的程序总是假设/会截断小数部分。作为一个快速修复,我想包含一个断言,以便如果有人在具有不同舍入行为的平台上编译,我至少会得到一个错误。

assert(3 / 2 == 1)static_assert(3 / 2 == 1)会完成这项工作吗?或者这些常数是否会被编译器内部算法优化掉,这可能与机器的实际操作有所不同?

1 个答案:

答案 0 :(得分:9)

"我刚刚得知在C ++ 11"之前没有定义除法运算符的舍入行为。如果两个参数都是正整数,则不成立。

3 / 2 == 1是一个编译时常量表达式,其值为true,因此代码将编译为assert(true)

考虑使用static_assert进行编译时断言。