6

为什么 std::stof、std::stod、std::stold 抛出异常的原因是什么?

http://en.cppreference.com/w/cpp/string/basic_string/stof

当通过异常处理错误不合适时,输入错误是一个常用的例子(通常用“异常情况”的古怪循环推理来表达,但仍然是一个很好的例子)。其他错误处理机制似乎并没有在 C++ 标准库中以某种方式被禁止。例如,另一个 C++11 新成员, family,使用返回类型std::unordered_map::insert中的第二个元素表示失败。std::pair<iterator,bool>函数内部的失败std::unordered_map::insert似乎比输入错误更“异常”。如果不尝试插入,则可以保证插入成功,但如果不进行解析,则无法保证解析成功。

我只是想知道这些功能被纳入标准时的基本原理是什么。希望它在某个地方发布,或者委员会成员可以顺便来对此有所了解。我并不是要求对异常与其他机制的优缺点进行全面的论述。

4

1 回答 1

6

原始论文N1803:简单数字访问使用异常。然而,这篇论文并没有解释他们的设计设计的任何部分来自哪里(比如为什么他们完全忽略了分配器!)。后来的修订版(N1982N2408)也没有说明他们为什么抛出异常。如果这些文件之外还有其他记录,我不知道。

不过,我可以大胆猜测一下。我们可以看到论文的初稿抛出了异常。这似乎没有争议。这可能源于这样一种观点,即异常是指示 C++ 中的操作失败的标准方法,尤其是 C++ 标准库。

一些标准库类型有其他错误机制(iostreams)。但一般来说,例外是默认情况。

于 2016-01-11T02:29:19.377 回答