operator==
的比较 std::array
由标准库提供,仅适用于相同大小的数组。例如,以下代码无法编译
#include <array>
int main()
{
std::array<int, 2> a{1, 3};
std::array<int, 3> b{1, 2, 3};
bool x = (a == b);
}
将大小不等的数组之间的比较定义为始终为 false 似乎是合乎逻辑的。但是,根据标准,不允许为非用户定义的类型重载 operator==
。总是可以选择定义一个比较函数,如
template <typename U, std::size_t N, std::size_t M>
bool compare(const std::array<U, N>& a, const std::array<U, M>& b) noexcept
{
if constexpr (N == M) {
return (a == b);
}
else {
return false;
}
}
这样的解决方案并不方便,因为这意味着当 compare(a, b)
和 a
可能具有不同的大小时,必须始终使用语法 b
。
标准库没有的根本原因
像上面的代码一样定义 operator==
吗?
有没有更好的 比较大小不等的数组的解决方案?
答案 0 :(得分:1)
标准库没有像上面的代码那样定义 operator== 有什么根本原因吗?
标准库没有定义它的最根本原因是:没有提出这样的 operator==。这是将包装器添加到标准中的 proposal。它不包含不提供模板不同实例之间比较的理由。文件中没有证据表明甚至考虑过此类运营商。