为什么 clang 4.0 没有捕获 std 异常?
Why does clang 4.0 not catch std exceptions?
>我有以下示例代码,该代码在 c++11 模式下使用 clang 4.0 抛出std::ios_base::failure
并尝试捕获它:
#include <ios>
#include <iostream>
#include <stdexcept>
int
main()
{
try {
throw new std::ios_base::failure( "Bonkers" );
}
catch( std::ios_base::failure &e ) {
std::cout << "Failure " << e.what() << std::endl;
}
catch( ... ) {
std::cout << "Anything" << std::endl;
}
return 0;
}
我像这样编译程序:
clang++-4.0 --std=c++11 -g -W -Wall ex.cc -o ex
我得到输出:
Anything
我本来希望它能捕获特定的异常。我用g ++ 5.4尝试了相同的方法,但结果相同。也尝试没有 c++11 标志,也无济于事。去掉所有包抄条款给了我这个:
terminate called after throwing an instance of 'std::ios_base::failure[abi:cxx11]*'
那么我错过了什么,我能做些什么来解决这个问题?当我不使用 c++11 标志时,也会显示 abi:cxx11。
如注释中所述,在C++中,您不需要像在 Java 中那样通过 new 分配异常,从而将指针指向异常。
相反,您只需构造异常并抛出它:
throw std::ios_base::failure( "Bonkers" );
然后,catch 子句的类型将匹配,程序将按预期运行。
相关文章:
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- std::元组分配和复制/移动异常保证
- Omnet++ 即将抛出 cRuntimeError 异常 std::length_error: basic_strin
- std::out_of_range字符串比较中的异常
- std::bad_weak_ptr对象构造后shared_from_this异常
- new(std::nothrow) int[n] 抛出异常
- 为什么std ::异常驱动器不否
- 切片std :: out_of_range to std ::异常在Visual Studio vs G 中
- 为什么 clang 4.0 没有捕获 std 异常?
- 如何抛出带有变量消息的 std::异常
- 未捕获从std::异常派生的C++自定义异常
- Boost序列化引发std异常
- 有没有办法在MFC应用程序中捕获未处理的std::异常
- 如何使用boost异常将信息添加到std::异常中
- STD异常会导致不安全的使用
- 如何向std::异常追加消息
- 通过引用捕获std::异常
- Crashlytics Fabric错误地处理了从32位平台上的swift ios调用的throw std::异常
- boost::线程程序在引发std::异常时崩溃