跳转至

Json.operator=

// 1
bool operator==(const Json& other) const noexcept;

// 2
template<typename  T>
requires (!std::is_same_v<T, Json>)
bool operator==(const T& other) const;
  1. 同类型的比较(两个 Json 对象),返回 true 表示相等,false 表示不相等。
  2. Json 与其他任意类型的比较,可以转换成功并比较时返回 true,否则返回 false

比较规则

1

对于两个 Json 对象,首先比较内部数据类型是否相同,相同则调用内部类型的比较。

std::vectorstd::map 都支持比较运算符,因此可以简单实现递归比较。

注意浮点数的比较会非常严格。

2

自身是 Json 类型,但比较对象与自身类型不同,此时才会调用此函数,否则调用 1 同类型比较函数。

此函数比较规则如下:

  1. 如果对方是六种基本JSON数据类型,则直接比较内部数据(类型不符直接 false)。
  2. 如果对方是整数或枚举类型,则判断自身数据是不是数值类型,不是则 false,否则四舍五入后进行整数比较。
  3. 如果对方是浮点数类型,则判断自身数据是不是数值类型,不是则 false,否则直接比较。
  4. 如果对方可以转换成 string_view ,则判断自身数据是不是字符串类型,不是则 false,否则转化成字符串视图比较。
  5. 如果 Json 可以构造成对方类型,且对方类型支持比较运算符,则将自身转换成对象类型进行比较。
  6. 如果对方可以转换成 Json 类型,则将对方转换成 Json 对象后调用 1 同类型比较函数。
  7. 上述六种都不满足,则返回 false

异常

  1. 无异常。
  2. 通常无异常,但部分类型的转换构造函数可能会抛出异常。

复杂度

线性(比较全部内容)。

版本

v0.8.0 至今。