C ++ 17 noexcept是函数类型的一部分。它还允许从noexcept函数指针到潜在地抛出函数指针的隐式转换。
void (*ptr_to_noexcept)() noexcept = nullptr;
void (*ptr_to_throwing)() = ptr_to_noexcept; // implicit conversion
Run Code Online (Sandbox Code Playgroud)
http://eel.is/c++draft/expr.static.cast#7说static_cast可以执行这种转换的逆过程。
void (*noexcept_again)() noexcept = static_cast<void(*)() noexcept>(ptr_to_throwing);
Run Code Online (Sandbox Code Playgroud)
不幸的是,GCC和clang都告诉我否则:https : //godbolt.org/z/TgrL7q
正确的方法是什么?是reinterpret_cast和C风格的投我唯一的选择吗?
当标记为 的函数尝试调用noexcept未标记为 的函数时,GCC 或 Clang 中是否有一个标志会抛出编译时错误(或警告) noexcept?
noexcept如果不是,那么当您从先前标记的 funciton 中删除时,您应该如何判断代码的哪些部分受到影响noexcept?难道根本就没有办法吗?