为什么 std::stof、std::stod 和 std::stold 处理异常错误?
Why do std::stof, std::stod, and std::stold handle errors with exceptions?
std::stof
、std::stod
和 std::stold
抛出异常的原因是什么?
http://en.cppreference.com/w/cpp/string/basic_string/stof
输入错误是一个常用的示例,用于说明通过异常处理错误时不合适(通常用“异常情况”的古怪循环推理来表达,但仍然是一个很好的例子)。 C++ 标准库中并没有以某种方式禁止其他错误处理机制。例如,另一个 C++11 新成员,std::unordered_map::insert
系列,使用 std::pair<iterator,bool>
return 类型中的第二个元素表示失败。 std::unordered_map::insert
函数内部的失败似乎比输入错误更“异常”。不尝试插入,可以保证插入成功,但不进行解析,则无法保证解析成功。
我只是想知道当时这些功能被接受到标准中的基本原理是什么。希望它能在某个地方发表,或者委员会成员可以顺便过来谈谈这件事。我并不是要一篇关于异常与其他机制的优缺点的综合论文。
原始论文,N1803: Simple Numeric Access uses exceptions. The paper however doesn't explain anything about where any part of their design design comes from (like why they completely ignore allocators!). The later revisions to it (N1982, N2408) 也只字未提它们抛出异常的原因。除了这些论文之外,是否还有其他记录,我不知道。
不过,我可以大胆猜测一下。我们可以看到论文的初稿就抛出了异常。而且这似乎从未有过争议。这可能源于这样一种观点,即异常是指示 C++ 中操作失败的标准方法,尤其是 C++ 标准库。
一些标准库类型有其他错误机制 (iostreams)。但一般来说,例外情况都是默认情况。
std::stof
、std::stod
和 std::stold
抛出异常的原因是什么?
http://en.cppreference.com/w/cpp/string/basic_string/stof
输入错误是一个常用的示例,用于说明通过异常处理错误时不合适(通常用“异常情况”的古怪循环推理来表达,但仍然是一个很好的例子)。 C++ 标准库中并没有以某种方式禁止其他错误处理机制。例如,另一个 C++11 新成员,std::unordered_map::insert
系列,使用 std::pair<iterator,bool>
return 类型中的第二个元素表示失败。 std::unordered_map::insert
函数内部的失败似乎比输入错误更“异常”。不尝试插入,可以保证插入成功,但不进行解析,则无法保证解析成功。
我只是想知道当时这些功能被接受到标准中的基本原理是什么。希望它能在某个地方发表,或者委员会成员可以顺便过来谈谈这件事。我并不是要一篇关于异常与其他机制的优缺点的综合论文。
原始论文,N1803: Simple Numeric Access uses exceptions. The paper however doesn't explain anything about where any part of their design design comes from (like why they completely ignore allocators!). The later revisions to it (N1982, N2408) 也只字未提它们抛出异常的原因。除了这些论文之外,是否还有其他记录,我不知道。
不过,我可以大胆猜测一下。我们可以看到论文的初稿就抛出了异常。而且这似乎从未有过争议。这可能源于这样一种观点,即异常是指示 C++ 中操作失败的标准方法,尤其是 C++ 标准库。
一些标准库类型有其他错误机制 (iostreams)。但一般来说,例外情况都是默认情况。