CppCoreGuidelines ES.105 不要除以整数 0
25 May 2023
“Don’t divide by integer zero”
理由
结果未定义,或者可能导致程序崩溃。
注意
也包括 %
运算。
坏例子
int divide(int a, int b) { // BAD, should be checked (e.g., in a precondition) return a / b; }
好例子
int divide(int a, int b) { // good, address via precondition (and replace with contracts once // C++ gets them) Expects(b != 0); return a / b; } int main() { cout << divide(8, 2); return EXIT_SUCCESS; }
如果 divide 函数的第二个参数是 0,编译会出错:
double divide(double a, double b) { // good, address via using double instead return a / b; } int main() { cout << divide(1.0, 0); return EXIT_SUCCESS; }
inf
double 类型除法的结果会产生一个无穷大结果。
其他情况:对于可以接受额外开销的关键应用,可以使用检查范围的整型,或浮点类型。
强化
标记整数除以 0 的情况