lexical_cast int to string
当把int转换成std::string时,忽略boost::lexical_cast的例外是安全的吗?
- "忽略"是什么意思?
- 我不明白为什么这个演员会失败,所以我想在不抓到糟糕的词汇演员表的情况下进行演员表。
- 您应该总是包装可以抛出try、catch块的调用。
- @康拉德的建议非常糟糕。
- 好的,解释一下好吗?
- @康拉德:部分取决于你认为的"包裹"。在适当的级别上应该有一个try/catch块来处理异常,除非有时在调试模式下只希望它显示在调试器上。这不一定在引发异常的任何地方。在这种情况下,我不认为boost::lexical_cast能扔除bad_alloc以外的任何东西,而且通常在本地没有任何关系。通常情况下,您只需要为最终用户提供一个合理的消息。
- stackoverflow.com/questions/2737328/…
- 下面的一些例子如何:codeproject.com/kb/recipes/tokenizer.aspx它们非常高效,而且有点优雅——它们不抛出异常,而是返回一个指示成功或失败的bool。
- ^在这里,我认为例外的一个主要原因是避免依赖返回代码。如果这些函数需要返回其他实际有用(即非异常)的值,该怎么办?
在将int转换为std::string时,词汇强制转换引发的异常与转换无关,但与资源不可用无关。因此,您可以忽略这一点,就像忽略由operator new引发的异常bad_alloc。
- 注意,我把海报"当把int转换成STD::字符串"时说
正如您所说,我不认为由于转换的原因,对数值类型的转换会失败——当然,它仍然会失败,因为字符串不能被分配,但是人们通常不会捕获该错误,除非在代码的最高级别。
如果您"忽略"一个异常,它将传播回调用堆栈,直到它被捕获到其他地方,或者它终止了程序,那么您可以安全地不捕获异常,而不必担心程序的继续和执行不安全/未知的操作(只要"崩溃"到命令提示是可接受的错误行为,还是您有其他处理未知异常的方法)。
不幸的是,异常堆栈跟踪在C++中不是那么容易实现的,所以当异常不在本地捕获时,创建有用的错误消息并不总是容易的。