在C ++中强化乘法和除法运算

时间:2015-08-28 20:40:52

标签: c++ templates math

每个人都应该知道*和/运算符在C和C ++中是很好的脚注:

  • 带*的乘法很容易溢出:32位* 32位= 64位
  • (整数 - )分区可能导致未定义的行为:X / 0 = ???

C ++标准库中是否有任何有助于避免这些问题的内容,例如抛出div_zero异常的std :: divide_int或抛出int_overflow异常的std :: multiply_int?如果没有,为什么? 在我看来,轻松访问这些功能将有助于编写安全的代码。

2 个答案:

答案 0 :(得分:1)

标准库中没有任何内容。原因是整数溢出不会从CPU中传播。有些CPU有标志来检查整数溢出,有些不是。就这么简单。

答案 1 :(得分:1)

此处没有标准库功能,但您可能需要查看SafeInt库。

如果你正在使用clang,你可能还想尝试-fsanitize=integer