C++17 中最晦涩的新特性 • Miyuki 的博客

主要观点:提案[P0137R1]向 C++标准库引入新函数std::launder,但其难以理解。
关键信息

  • std::launder在 C++标准委员会会议报告中有提及,如 Botond Ballo 称若非世界上少数知晓之人,无需了解。
  • 示例中展示std::launder的作用,如在联合类型U的操作中,可防止优化器进行常量传播。
  • Alisdair Meredith 在 CppCon 2016 的演讲中提到std::launder在处理常量限定元素的容器时可能有用。
  • GCC 最初将std::launder实现为无操作,而 Richard Smith 给出的示例在 Clang 中编译正确,在 GCC 中编译错误。
    重要细节
  • 在示例代码中,通过不同的操作和std::launder的使用,展示了其对优化和对象状态的影响。
  • 如在类层次结构的示例中,std::launder用于处理对象动态类型的变化,GCC 的优化器在处理此情况时出现错误,该问题已被发现并修复,目前 GCC 中 C++17 支持仍为实验性的。
阅读 28
0 条评论