第 5 章 RHEL 10 中的显著变化
以下是 RHEL 10 中发生的重要更改。
5.1. C++ 中兼容性的重大更改 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
std::condition_variable::wait
现在是一个线程取消点-
在 GCC 11 及更早版本中,
std::condition_variable::wait
函数是noexcept
,这使得它与线程取消不兼容。因此,如果对pthread_cancel
的调用取消了std::condition_variable::wait
中阻止的一个线程,则进程将被终止。在 GCC 12 及更高版本中,std::condition_variable::wait
可以通过调用pthread_cancel
函数取消,这会松开堆栈。如果您的代码依赖wait
永远不会抛出异常,请检查代码并采取合适的操作。 - 弃用的类模板, 某些类模板已在 C++ 的新版本中弃用,并在 GCC 12 及之后的版本中生成警告诊断
以下类模板已在 C++11 及更高版本中弃用:
-
std::unary_function
-
std::binary_function
-
-
std::iterator
类模板已在 C++17 及更高版本中弃用。
要防止警告诊断,您可以执行以下操作之一:
当您不想对代码进行其他更改时,请使用 GCC 的诊断指令来压制警告诊断。例如:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations” class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic pop
#pragma GCC diagnostic push #pragma GCC diagnostic ignored “-Wdeprecated-declarations” class Functor : public std::unary_function<int, int> { /* … */ }; #pragma GCC diagnostic pop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您希望代码与更新版本的 C++ 兼容时,请将代码中的这些类模板替换为嵌套的 typedef。例如,您可以将
std::unary_function
基础类替换为result_type
和argument_type
typedefs :Copy to Clipboard Copied! Toggle word wrap Toggle overflow