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