为什么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>
返回类型中的第二个元素失败。 std::unordered_map::insert
功能内部的失败似乎更多&#34;特殊&#34;比输入错误。在不尝试插入的情况下,可以保证插入成功但不解析它就不能保证解析成功。
我只是想知道当这些功能被接纳到标准中时的基本原理。希望它可以在某个地方发布,或者委员会成员可以匆匆而过,并对此有所了解。我没有要求就异常与其他机制的利弊进行全面的论述。
答案 0 :(得分:6)
原始论文N1803: Simple Numeric Access使用例外情况。然而,本文没有解释任何关于设计设计中任何部分的来源(例如为什么他们完全忽略分配器!)。对它的后期修订(N1982,N2408)也没有说明为什么会抛出异常。如果除了这些文件之外还有其他记录,我不知道。
然而,我可以冒险猜测。我们可以看到该论文的初稿引发了异常。而且这似乎并没有引起争议。这可能源于以下观点:异常是指示C ++中操作失败的标准方法,特别是C ++标准库。
某些标准库类型具有其他错误机制(iostreams)。但一般来说,例外是默认情况。