什么是
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
函数内部失败似乎比输入错误更加“异常”。尝试插入之前,可以保证插入成功,但是没有解析就无法保证解析成功。
我只是想知道当时这些函数被接受为标准时的原因。希望它已经发布在某个地方或者委员会成员可以过来解释一下。我不是要求关于异常与其他机制的优缺点的全面论述。
strto
*的签名,如果您要在手写递归下降解析器中使用这些函数之一,您必须在调用它之前复制剩余的输入。或者考虑流输入的差劲组合性。因此,对于良好的解析,您有两个选择,自己编写或使用第三方库rsp.解析器生成器。 - Arne Vogel