ES.103:防止溢出
Overflow usually makes your numeric algorithm meaningless. Incrementing a value beyond a maximum value can lead to memory corruption and undefined behavior.
溢出通常会导致数字算法失去意义。超过最大值的增量运算会导致内存破坏和无定义的行为。
Example, bad(反面示例)
int a[10];
a[10] = 7; // bad
int n = 0;
while (n++ < 10)
a[n - 1] = 9; // bad (twice)
Example, bad(反面示例)
int n = numeric_limits::max();
int m = n + 1; // bad
Example, bad(反面示例)
int area(int h, int w) { return h * w; }
auto a = area(10'000'000, 100'000'000); // bad
Exception(例外)
Use unsigned types if you really want modulo arithmetic.
如果你确实需要按模运算可以使用无符号类型。
Alternative: For critical applications that can afford some overhead, use a range-checked integer and/or floating-point type.
可选项:对于可以承受一定额外开销的敏感应用,使用带有范围检查的整数或者浮点数。
Enforcement(实施建议)
???
原文链接
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es103-dont-overflow
新书介绍
以下是本人3月份出版的新书,拜托多多关注!
本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。
对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。
觉得本文有帮助?欢迎点赞并分享给更多的人。
阅读更多更新文章,请关注微信公众号【面向对象思考】