我有一个不能简单的C ++程序
#include <string>
#include <iostream>
using namespace std;
void throwE(){
throw "ERROR";
}
int main(int argc, char* argv[]){
try{
throwE();
} catch(const std::string& msg){
cerr << msg << endl;
}
return 0;
}
但它在运行时会引发异常:
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
任何人都可以告诉我为什么会发生这种情况,为什么没有发现异常?
答案 0 :(得分:8)
您没有抛出std::string
,而是以nul终止的字符串("ERROR" is really const char[6]
的类型,throw
表达式将其拒绝为const char*
。)。所以你没有抓住异常。如果您将throwE
更改为抛出std::string
,则会按预期运行:
void throwE(){
throw std::string("ERROR");
}
或者,抓住const char*
,它与const char[6]
衰变到const char*
后抛出的异常类型相匹配:
} catch(const char* msg){
cerr << msg << endl;
}
输出:
ERROR