当我使用时:
throw "something happen"
__ cxa_throw可以捕获此异常。
但如果我写:
std::string s; s.resize(-1);
__ cxa_throw无法抓住它; 我想知道为什么以及如何解决它。
更新:抱歉不完整的说明。我的目的是在
时知道崩溃堆栈std::string s; s.resize(-1);
被召唤。 如果它没有抛出任何异常,我该怎么办?
对不起,我忘了附上照片了。 第一页是
std::string s; s.resize(-1);
第二个是
throw "something happen"
答案 0 :(得分:2)
std::string::resize成员函数不会引发异常,因为-1
的整数字总是转换为std::size_t
类型的最大无符号值,这是函数接受的对于32位平台,可能会导致4294967295
,或者在64位平台或类似平台上导致18446744073709551615
。可抛出的异常是std::length_error。这篇SO帖子有更多信息:
Using -1 as a flag value for unsigned (size_t) types