首页 > 解决方案 > 为什么在 C++20 中没有将 std::accumulate 设为 constexpr?

问题描述

在 C++20 中,已经制作了许多(大多数?)C++ 标准库算法constexpr。然而 -std::accumulate没有

似乎它可能是

template<class InputIt, class T>
constexpr T accumulate(InputIt first, InputIt last, T init)
{
    for (; first != last; ++first) {
        init = std::move(init) + *first;
    }
    return init;
}

那么 - 有没有它没有被constexpr编辑的原因?

注意:这个问题的动机是这个关于编译时积累的问题的回答。

标签: c++c++-standard-libraryc++20accumulate

解决方案


P1645R1实际上在贝尔法斯特会议中被采纳,以包含在 C++20 中,以响应 NB 评论US 320

因此,以下所有算法都将constexpr在 C++20 中使用(除了采用 的重载算法ExecutionPolicy):

  • 积累
  • 减少
  • inner_product
  • transform_reduce
  • 部分和
  • 排他扫描
  • 包容扫描
  • transform_exclusive_scan
  • transform_inclusive_scan
  • 相邻差
  • 微塔

推荐阅读