【问题标题】:stl algorithms, constexpr, C++stl 算法,constexpr,C++
【发布时间】:2021-03-27 00:12:00
【问题描述】:

我想每个人都知道,从C++20 开始,语言有了巨大的改进。我想从其他重大改进中提及这些。所以std::copystd::movestd::transform 正在变成constexpr。奇怪的是所有iterator 访问器都已经是constexpr 但这些函数不是。如果您考虑他们的实现,我认为只需在他们前面添加 constexpr 就可以了。

所以我有一个问题。

添加constexpr可以自己编写这些函数的实现吗? 我会获得更多的性能吗?

【问题讨论】:

  • constexpr != “轻松提升性能”。有很多关于 SO 本身的帖子,当这个期望没有得到满足时,人们会感到困惑。
  • 没有什么能阻止你编写一个看起来像 C++ 标准库的库(STL 不再是一个正确的术语)。除非您想要未定义的行为,否则不要将您的库放在 std 中。您还需要注意确保库中的函数/类型/等不会无意间以奇怪的方式与标准库进行交互。不过,我不会打赌您会获得更高的性能 - 可靠地提高性能需要的不仅仅是散布诸如 constexpr 之类的关键字。

标签: c++ algorithm stl iterator constexpr


【解决方案1】:

添加constexpr可以自己编写这些函数的实现吗?

如果定义明确,那就没问题了。您的实现必须具有不同的名称或位于不同的命名空间中,因为您不能替换 std:: 版本。

我会获得更高的性能吗?

使用分析器或编写基准来回答这个问题。

【讨论】:

  • 事实上我认为优化级别 -O3 它变成了相同的程序集:)
  • @HrantNurijanyan 这并非闻所未闻。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多