提问人:Alexander Gruzintsev 提问时间:11/15/2022 最后编辑:sideshowbarkerAlexander Gruzintsev 更新时间:11/16/2022 访问量:330
为什么在 macOS M1 环境中没有使用 no-rtti 捕获“std::invalid_argument”?
Why `std::invalid_argument` is not caught with no-rtti in macOS M1 environment?
问:
今天我在捕获 C++ 异常时遇到了一个奇怪的行为,谁能向我澄清一下?代码截图
#include <iostream>
#include <string>
#include <exception>
int main() {
try {
std::stod("notanumber");
} catch (const std::invalid_argument&) {
std::cerr << "std::invalid_argument" << std::endl;
} catch (const std::out_of_range&) {
std::cerr << "std::out_of_range" << std::endl;
} catch (const std::exception&) {
std::cerr << "Caught by ancestor" << std::endl;
} catch (...) {
auto ptr = std::current_exception();
auto type = __cxxabiv1::__cxa_current_exception_type();
std::cerr << type->name() << std::endl;
std::cerr << "..." << std::endl;
}
return 0;
}
写入输出
St16invalid_argument
...
环境详细信息
C++ 14, disabled RTTI
Clang 13.1.6 arm64-apple-darwin-21.6.0
macOS Monterey 12.6
我希望在第一个捕获块上捕获异常
已更新。即使是最简单的捕获也不适合我在环境中
try {
std::stod("notanumber");
} catch (const std::invalid_argument&) { // not caught
std::cerr << "std::invalid_argument" << std::endl;
}
答: 暂无答案
评论