为什么std :: stof,std :: stod和std :: stold会处理异常错误?

时间:2016-01-11 01:47:06

标签: c++ c++11 c++-standard-library rationale

为什么std :: stof,std :: stod,std :: stold抛出异常的理由是什么?

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

输入错误是一个常用的例子,用于通过异常进行错误处理不合适时(通常采用奇怪的循环推理,特殊情况&#34;但仍然是一个很好的例子)。它并不像其他错误处理机制在C ++标准库中以某种方式被禁止。例如,另一个C ++ 11新手std::unordered_map::insert系列表示使用std::pair<iterator,bool>返回类型中的第二个元素失败。 std::unordered_map::insert功能内部的失败似乎更多&#34;特殊&#34;比输入错误。在不尝试插入的情况下,可以保证插入成功但不解析它就不能保证解析成功。

我只是想知道当这些功能被接纳到标准中时的基本原理。希望它可以在某个地方发布,或者委员会成员可以匆匆而过,并对此有所了解。我没有要求就异常与其他机制的利弊进行全面的论述。

1 个答案:

答案 0 :(得分:6)

原始论文N1803: Simple Numeric Access使用例外情况。然而,本文没有解释任何关于设计设计中任何部分的来源(例如为什么他们完全忽略分配器!)。对它的后期修订(N1982N2408)也没有说明为什么会抛出异常。如果除了这些文件之外还有其他记录,我不知道。

然而,我可以冒险猜测。我们可以看到该论文的初稿引发了异常。而且这似乎并没有引起争议。这可能源于以下观点:异常是指示C ++中操作失败的标准方法,特别是C ++标准库。

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