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

问题描述 投票:0回答:3

想要在编译时比较 std::array

非常自然的
;而且它的
operator==()
显然是
constexpr
'able 的。然而 - 它没有标记为
constexpr
。这是有意为之还是疏忽?而且 - 这样做的原因是什么(显然在 C++17 中也是如此)?

c++ c++11 comparison constexpr stdarray
3个回答
9
投票

P0031解释了为什么它没有提出

constexpr
比较:

目前比较和

swap
/
fill
可以在帮助下实现 来自
<algorithm>
标头的算法。标记比较与 constexpr 将破坏这种能力并可能导致 性能下降。

例如,

==
可以用
std::equal
来实现,在适当的情况下,它可以称为高度优化但决定不-
constexpr
memcmp
。将
constexpr
替换为
==
将排除这种优化,无需特殊的编译器帮助。


0
投票

起,

operator==
constexpr
std::array
,由
P1023
接受。


-2
投票

基本原理可能是这样的:如果包含类型的

==
也是
constexpr
,则数组的
==
只能是
constexpr

由于容器无法强制执行这一点,因此它(通常)不能提供

operator==() constexpr

© www.soinside.com 2019 - 2024. All rights reserved.