assert(3 / 2 == 1): Does this work?

assert(3 / 2 == 1): Does this work?

本文关键字:Does this work assert      更新时间:2023-10-16

我刚刚了解到除法运算符的舍入行为在C++11之前没有定义。解决方案是使用std::div。(安全地舍入到下一个较小倍数)

我的程序总是假设/只会截断小数部分。作为一个快速解决方案,我希望包含一个断言,这样,如果有人在具有不同舍入行为的平台上编译,我至少会得到一个错误。

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

"我刚刚了解到除法运算符的舍入行为在C++11之前没有定义"。如果两个参数都是正整数,则情况并非如此。

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

考虑将static_assert用于编译时断言。