为什么抛出自己导致异常?

时间:2014-09-30 06:49:52

标签: c++ exception

我有一个不能简单的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

任何人都可以告诉我为什么会发生这种情况,为什么没有发现异常?

1 个答案:

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