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);
}

将大小不等的数组之间的比较定义为始终为 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== 吗?

  • 有没有更好的 比较大小不等的数组的解决方案?

解决方法

标准库没有像上面的代码那样定义 operator== 有什么根本原因吗?

标准库没有定义它的最根本原因是:没有提出这样的 operator==。这是将包装器添加到标准中的 proposal。它不包含不提供模板不同实例之间比较的理由。文件中没有证据表明甚至考虑过此类运营商。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...