无法捕获C ++长度错误异常

时间:2017-10-10 10:44:30

标签: c++ exception

当我使用时:

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"

enter image description here

enter image description here

1 个答案:

答案 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