gpt4 book ai didi

c++ - 有没有办法知道异常是否已被禁用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:48 26 4
gpt4 key购买 nike

有没有办法知道 C++ 中是否禁用了异常?

我正在开发一个使用异常的应用程序,我想避免让用户在禁用异常的情况下编译应用程序,例如警告您需要异常。

最佳答案

标准当然不包含这样的功能。

假设您正在使用现代且功能强大的编译器来编译包含 throw 的代码,那么编译器将会出错。但是你当然可以编译一部分代码有异常,另一部分没有异常,在这种情况下你仍然会抛出异常,但无法捕获它们(因为也没有 catch )。所以程序可能会在第一次抛出异常时终止。

如果您提供 header ,您可以在未命名的命名空间中添加一个虚拟函数:

namespace {
inline void dummy_dummy_my_thing_to_check_exceptions()
{
throw 123;
}
}

甚至永远不会调用那个函数,它仍然会编译失败。

我怀疑允许您关闭异常的任何编译器都会接受执行此操作的代码 - 我已经尝试过 g++ 4.8.2、g++ 4.6.3、clang++ 3.6.0(截至三周前)和 clang++ 2.9。对于头文件中的上述函数,所有这些都给出错误。如果我删除 -fno-exceptions,代码将编译并运行(终止,因为代码在函数中执行 throw 1

总代码:

x.h:

extern int func();

namespace {
inline void dummy_dummy_my_thing_to_check_exceptions()
{
throw 123;
}
}

x.cpp:

int func()
{
throw 1;
}

除了.cpp:

#include "x.h"

int main()
{
func();
}

编译:

g++ -c except.cpp && g++ except.o x.cpp

clang++ -c except.cpp && clang++ except.o,

但不会编译:

g++ -c except.cpp -fno-exceptions && g++ except.o x.cpp

clang++ -c except.cpp -fno-exceptions && clang++ except.o.

关于c++ - 有没有办法知道异常是否已被禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027880/

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