gpt4 book ai didi

c++ - 比较 vector 的不等式仅在 vector 元素上使用相等运算符。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:01 25 4
gpt4 key购买 nike

我的两个编译器(g++ 和 clang)都不会编译这个:

#include <vector>

struct A {
friend bool operator!=(A const& a1, A const& a2) { return false; }
};

int main()
{
std::vector<A> v1, v2;
return (v1 != v2);
}

错误是 STL_algobase.h 中某处的 !(*__first1 == *__first2) 无效。

换句话说,它完全忽略了 A 的现有运算符!=。不用说,如果我定义一个 operator== 然后它编译并工作。

按照标准应该是这样的吗?

如果是,为什么?

最佳答案

是因为the comparison operators想要一个 EqualityComparableLessThanComparable类型。

只有 ==< , 你可以导出等价的 != , <= , >= , 和 > .换句话说,只需实现 2 个运算符,就可以获得所有 6 个比较(假设我没有在逻辑上犯错):

(a != b) is !(a == b)
(a <= b) is !(b < a)
(a >= b) is !(a < b)
(a > b) is (b < a)

标准容器通常使用它,并将使用 operator==operator<在进行类型比较时。

所以,是的,这是应该的。

至于问题的第二部分(为什么),我实际上并不完全确定为什么没有使用其他可用的运算符。 p>

关于c++ - 比较 vector 的不等式仅在 vector 元素上使用相等运算符。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com