代码之家  ›  专栏  ›  技术社区  ›  einpoklum

为什么std::数组的运算符==()没有标记为constexpr?

  •  6
  • einpoklum  · 技术社区  · 7 年前

    它是 very natural 想要比较 std::array 编译时的;及其 operator==() constexpr “能够。然而-它 isn't 标记 常量表达式

    2 回复  |  直到 3 年前
        1
  •  9
  •   T.C. Yksisarvinen    7 年前

    P0031 解释了为什么它没有提议 constexpr 比较:

    当前比较和 swap / fill 可以在帮助下实施 <algorithm> 标题。标记与的比较 性能下降。

    例如 == 可以在以下方面实施: std::equal 常量表达式 memcmp . 制作 对于 == 将在没有特殊编译器帮助的情况下排除此优化。

        2
  •  -2
  •   Marcus Müller    7 年前

    == 数组的只能是 constexpr 是一个 常量表达式

    因为容器不能强制执行,所以它(通常)不能提供 operator==() constexpr