为什么不将std :: array的operator ==()标记为constexpr?

ein*_*ica 6 comparison constexpr c++11 stdarray

想要在编译时进行比较是很自然的std::array ; 它operator==()显然是constexpr'能够的.然而 - 它没有标记constexpr.这是故意还是疏忽?而且 - 它是什么原因留下来的(显然也是在C++ 17中)?

T.C*_*.C. 8

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

当前比较和swap/ fill或可以借助来自<algorithm>头部的算法来实现.标记与constexpr的比较将破坏该能力,并可能导致性能下降.

例如,==可以实现,std::equal在适当的情况下,可以调用高度优化但非确定性constexpr memcmp.制作constexpr用于==将排除这种优化,无需特殊的编译器的帮助.

  • Daniel Kruger说:如果采用提案[P0202](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0202r1.html),可以解决这个问题. (4认同)