使用约定 std::feclearexcept
Conventions for using std::feclearexcept
使用std::feclearexcept
有什么约定吗?在您通常看到的示例中,这称为 before 执行可能触发浮点异常的操作。这似乎是一件安全的事情。
但是在检测到并处理了一个错误之后,您是否也应该调用std::feclearexcept
,这样错误状态就不会在程序的其余部分执行过程中持续存在?
如果您总是在检查浮点异常之前调用 std::feclearexcept
,并且如果您总是检查所有可能触发此类异常的操作,那么这将是多余的。但至少从我的经验来看,这些在实际软件中有很多假设和不太可能的情况。
仅在执行特定操作之前(重新)设置 errno
并打算在之后检查 errno
的推理类似。
可能在某些情况下设置了 errno
或浮点异常标志,而您并不知道。你不知道它们到底发生在哪里,也不知道它们在语义上意味着什么。您没有能力处理“呃,过去某处发生溢出但我不知道那是什么意思”的情况。
因此,您在执行特定操作之前重置 errno
/调用 std::feclearexcept
,您希望知道确切的结果/错误情况, 知道如何处理它。
在该操作之后重置错误标志没有任何意义。
使用std::feclearexcept
有什么约定吗?在您通常看到的示例中,这称为 before 执行可能触发浮点异常的操作。这似乎是一件安全的事情。
但是在检测到并处理了一个错误之后,您是否也应该调用std::feclearexcept
,这样错误状态就不会在程序的其余部分执行过程中持续存在?
如果您总是在检查浮点异常之前调用 std::feclearexcept
,并且如果您总是检查所有可能触发此类异常的操作,那么这将是多余的。但至少从我的经验来看,这些在实际软件中有很多假设和不太可能的情况。
仅在执行特定操作之前(重新)设置 errno
并打算在之后检查 errno
的推理类似。
可能在某些情况下设置了 errno
或浮点异常标志,而您并不知道。你不知道它们到底发生在哪里,也不知道它们在语义上意味着什么。您没有能力处理“呃,过去某处发生溢出但我不知道那是什么意思”的情况。
因此,您在执行特定操作之前重置 errno
/调用 std::feclearexcept
,您希望知道确切的结果/错误情况, 知道如何处理它。
在该操作之后重置错误标志没有任何意义。