我想定义某种安全除法(和模数)函数,当尝试除以零时会返回一些预定义值。我不想抛出异常,只是为了返回一些“合理”的值(1?0?)并继续程序流程。显然没有正确的返回值,但我想知道是否有一些标准或已知的方法
答案 0 :(得分:6)
由于你专门要求C ++,你可以做
pair< int, bool > safe_div( int lhs, int rhs ) {
if ( rhs == 0 || lhs == INT_MIN && rhs == -1 ) return make_pair(0, false);
else return make_pair( lhs/rhs, true );
}
交替使用boost::optional
optional<int> safe_div( int lhs, int rhs ) {
if ( rhs == 0 || lhs == INT_MIN && rhs == -1 ) return optional<int>();
else return lhs/rhs;
}
我假设你想要一个整数运算,我添加了一个溢出检查。
答案 1 :(得分:2)
IEEE浮点标准定义了从division by zero获取的内容。
如果你使用整数,你可以使用这个标准来定义你自己的例程,但你必须定义什么是Inf,什么是整数逻辑中的NaN。
答案 2 :(得分:0)
您可以将值作为输出参数返回。函数返回类型可能是bool,成功时返回true,除零时返回false。然后你只需在函数后检查true。但现代方法是抛出异常而将其捕获到客户端代码中。然后你可以选择忽略它。
答案 3 :(得分:0)
我假设这是为了整数,因为ieee浮动已经修复了这个
问题是价值可能是“合理的”取决于使用,所以你需要传递它,例如。
DivOrDefault(int a, int b, int def)
{
if (b == 0) return def;
return a/b;
}
或者你可以在带内信号通知inf / Nan(你可以将int包装在一个结构中,该结构也有一个bo和inf或者是nan)或带外(如m_pGaldiator建议的那样)