c++ - 这个C++结构是什么意思?

标签 c++ struct overloading

我得到了一个简单的 C++ 结构,如下所示:

// Functor for peak to decreasing intensity sorting
struct cmp_decr_int2
{
    bool operator() (peak2 a, peak2 b) 
    { 
        return a.int2 > b.int2;
    }   
};

此示例中是否存在运算符重载?

最佳答案

是的。 operator() 被称为“函数调用”运算符,它允许对象像函数一样使用。这样的类称为“仿函数”。

一个常见的模式是使仿函数比较两个事物的相等性或关系,用于任何需要比较谓词的事物。 (例如,这个可以在 std::map 中使用。它会有一个像cmp_decr_int2 compare; 这样的成员,然后它可以比较两个事物之间的关系: if (compare(x, y))/* x 小于 y,根据某些指标 */)

这个特定的结构通过比较它们的 int2 成员来对两个 peak2 进行排序。最好写成:

struct cmp_decr_int2
{
    //                     note const! vvvvv
    bool operator() (peak2 a, peak2 b) const
    { 
        return a.int2 > b.int2;
    }   
};

该函数应该是const,因为它不需要更改任何成员(无需更改。)const-correctness很重要。*

在许多情况下,这些仿函数用于参数本身为 const 的上下文中,因此您应该像示例中那样按值或按常量引用来获取参数。

您应该更喜欢通过常量引用而不是按值来传递类型,除非该类型是基本类型(float、unsigned int、double 等)或小于 void*。那么在大多数情况下,您将通过 const-reference:

struct cmp_decr_int2
{
    // note const&:  vvvvv       v    vvvvv       v    vvvvv
    bool operator() (const peak2 & a, const peak2 & b) const
    { 
        return a.int2 > b.int2;
    }   
};

<子> *如果这在 std::map 中用作谓词,例如,如果没有 const,则 map 将无法在 中比较两个事物>const 函数。

关于c++ - 这个C++结构是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473543/

相关文章:

c# - CA 2225 同时重载长运算符

c++ - ofstream 关​​闭导致程序崩溃

c++ - 使用 Xlib 时 XCode 中的链接错误

c - 'variable' 的存储大小未知

c - 在c中显示递归结构

typescript - typescript 中的重载函数类型

c++ - 条件运算符和数组/返回指向数组的指针

c++ - std::unique_lock::try_lock_until() 是否忙等待?

c - 从结构打印数组

c++ - 使用模板特化重载返回类型?