C++ 将int转换为字符串

C++ 将int转换为字符串,c++,boost,lexical-cast,C++,Boost,Lexical Cast,当将int转换为std::string时,忽略异常是否安全?正如您所说,我不认为转换数字类型会因转换原因而失败-当然,它仍然会因无法分配字符串而失败,但是人们通常不会捕捉到这个错误,除非是在代码的最高级别。当将int转换为std::string时,词法转换引发的异常与转换无关,但与资源不可用有关。因此,您可以用忽略运算符new引发的异常bad\u alloc的相同方式忽略此异常。如果您“忽略”异常,它将传播回调用堆栈,直到在别处捕获它,或者它终止程序,关键是,您可以安全地捕获异常,而不必担心您的

当将
int
转换为
std::string
时,忽略异常是否安全?

正如您所说,我不认为转换数字类型会因转换原因而失败-当然,它仍然会因无法分配字符串而失败,但是人们通常不会捕捉到这个错误,除非是在代码的最高级别。当将
int
转换为
std::string
时,词法转换引发的异常与转换无关,但与资源不可用有关。因此,您可以用忽略运算符new引发的异常
bad\u alloc
的相同方式忽略此异常。

如果您“忽略”异常,它将传播回调用堆栈,直到在别处捕获它,或者它终止程序,关键是,您可以安全地捕获异常,而不必担心您的程序继续运行和执行不安全/未知的操作(只要命令提示符的“崩溃”是可接受的错误行为,或者您有其他处理未知异常的方法)


不幸的是,异常堆栈的痕迹在C++中不容易得到,所以当异常没有被本地捕获时,创建有用的错误消息并不总是容易的。

你的意思是“忽略”?“康拉德,非常糟糕的建议。”康拉德:部分地取决于你所考虑的“包装”。在适当的级别上应该有一个try/catch块来处理异常,除非有时在调试模式下,您只是希望它显示在调试器上。这不一定离引发异常的位置很近。在这种情况下,我不认为除了
bad\u alloc
之外,
boost::lexical\u cast
还可以抛出任何东西,通常在本地没有什么可以做的。通常情况下,你会发现它只是为了给最终用户提供一条合理的消息。下面的一些例子怎么样:它们非常高效,而且有点优雅——它们不会抛出异常,而是返回一个bool,表示成功或失败。请注意,我在海报上说的“将int转换为std::string时”