gpt4 book ai didi

c++ - 为什么 throw 本身会导致异常?

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:02 24 4
gpt4 key购买 nike

我有一段再简单不过的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

谁能告诉我为什么会这样,为什么没有捕获异常?

最佳答案

你不是在抛出 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

关于c++ - 为什么 throw 本身会导致异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com