c++ - std::array 的比较运算符
问题描述
标准库提供的 比较仅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);
}
将大小不等的数组之间的比较定义为始终为假似乎是合乎逻辑的。但是,按照标准,不允许对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==
像上面的代码中定义的那样有根本原因吗?比较大小不等的数组是否有更好的解决方案?
解决方案
标准库没有像上面的代码那样定义 operator== 是否有根本原因?
标准库没有定义它的最根本原因是:没有提出这样的 operator== 。这是将包装器添加到标准中的建议。它不包含不提供模板不同实例之间比较的理由。文件中没有证据表明甚至考虑过这种运营商。
推荐阅读
- javascript - 我有 3 个 div,如何通过单击(一个接一个)选择 2 个 div 并在 Javascript 中不显示(或其他)第三个
- java - 二叉树 - 如何删除元素;爪哇
- c++ - 为什么我会出现运行时错误:加载类型为“_Bit_type”(stl_bvector.h)的空指针?
- c# - 给定 json 作为响应,但不确定如何解析它
- android - Tomtom android SDK中的地理搜索类型在哪里
- reactjs - React JS 错误:“组件”未定义
- python - 为什么 R 可以开箱即用,但 Python (matplotlib) 需要 tkinter?
- php - XAMPP - 如何从主目录执行 PHP 文件?
- python - python 正则表达式单独的赋值语句以分号结尾
- html -