【发布时间】:2022-01-08 01:26:55
【问题描述】:
最近我注意到 C++ std::less 是一个类,虽然它只是比较两个对象的值。这里是一个示例代码:
template <class T> struct less {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
那么定义一个类而不是一个函数有什么好处呢? 我也想知道为什么在类中没有数据成员的情况下使用'const'关键字?
【问题讨论】:
-
一般来说很难给出答案。在这种情况下,可能是为了与标准库中的其他仿函数保持一致。一般来说,“普通函数”可以保持状态(如类和结构)。至于“为什么是 const”——因为最好将所有内容标记为
const尽可能。 -
typedef T first_argument_type; typedef T second_argument_type;-- 那是旧的,现代 C++ 没有它 -
一般来说,仿函数(函数对象)可以携带状态,以及传递给它的函数的附加使用信息(例如 typedefs),而指向函数的指针则不能。按值传递(模板化)仿函数作为模板参数的一个特定优势是编译器有机会进行内联,这对于函数指针通常是不可行的 - 并且(假设是现代优化编译器)通常会提供运行时性能优势。
-
这能回答你的问题吗? why is std::less a functor?