第 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
    Copy to Clipboard Toggle word wrap
  • 当您希望代码与更新版本的 C++ 兼容时,请将代码中的这些类模板替换为嵌套的 typedef。例如,您可以将 std::unary_function 基础类替换为 result_typeargument_type typedefs :

    class Functor
    {
      using result_type = int;
      using argument_type = int;
      /* … */
    };
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat