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;
- 同类型的比较(两个
Json
对象),返回true
表示相等,false
表示不相等。 Json
与其他任意类型的比较,可以转换成功并比较时返回true
,否则返回false
。
比较规则
1
对于两个 Json
对象,首先比较内部数据类型是否相同,相同则调用内部类型的比较。
std::vector
和std::map
都支持比较运算符,因此可以简单实现递归比较。
注意浮点数的比较会非常严格。
2
自身是 Json
类型,但比较对象与自身类型不同,此时才会调用此函数,否则调用 1 同类型比较函数。
此函数比较规则如下:
- 如果对方是六种基本JSON数据类型,则直接比较内部数据(类型不符直接 false)。
- 如果对方是整数或枚举类型,则判断自身数据是不是数值类型,不是则 false,否则四舍五入后进行整数比较。
- 如果对方是浮点数类型,则判断自身数据是不是数值类型,不是则 false,否则直接比较。
- 如果对方可以转换成
string_view
,则判断自身数据是不是字符串类型,不是则 false,否则转化成字符串视图比较。 - 如果
Json
可以构造成对方类型,且对方类型支持比较运算符,则将自身转换成对象类型进行比较。 - 如果对方可以转换成
Json
类型,则将对方转换成Json
对象后调用 1 同类型比较函数。 - 上述六种都不满足,则返回
false
。
异常
- 无异常。
- 通常无异常,但部分类型的转换构造函数可能会抛出异常。
复杂度
线性(比较全部内容)。
版本
v0.8.0 至今。