gpt4 book ai didi

c++ - 为什么在 operator< 存在时定义 lt?

转载 作者:行者123 更新时间:2023-11-27 23:14:02 24 4
gpt4 key购买 nike

vector 运算的一段代码包含这些类模板定义:

template <class T>
class lt {
public:
static int compare(T a, T b) { return(a < b); }
};
template <class T>
class gt {
public:
static int compare(T a, T b) { return(a > b); }
};

但是为什么?它没有使用额外的异常处理,它依赖于 T 类的对象已经有了 operator<operator> .使用运算符不是同样容易/更容易吗?还是应该使用模板类进行比较?

最佳答案

只要有人需要二元谓词,即采用两个参数的自由函数,就可以使用这些模板。重载 operator<可能不会被定义为自由的二进制函数,因此这些模板充当一种适配器,让您可以使用现有的运算符,无论它们是如何定义的,只要 expression a < b可以解决。

请注意,该标准已经提供了非常相似*的模板;他们叫std::lessstd::greater ,它们被有序的关联容器使用。

*) 标准库谓词为它们如何处理指针提供了额外的保证。

关于c++ - 为什么在 operator< 存在时定义 lt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877178/

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