bool 运算符() 的作用是什么?

Shi*_*izu 1 c++ struct operator-overloading c++11

我无法理解GeeksforGeeks的这段代码:

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Comparison function for sorting the
// set by increasing order of its pair's
// second value
struct comp {
    template <typename T>
  
    // Comparator function
    bool operator()(const T& l,
                    const T& r) const
    {
        if (l.second != r.second) {
            return l.second < r.second;
        }
        return l.first < r.first;
    }
};
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow中找到了类似的文章。但它们都略有不同。

bool operator ()我还想问一下,写和写有什么区别operator bool()

asm*_*mmo 5

bool operator()定义类实例的运算符()并使其接受两个参数进行比较并返回bool.

Whileoperator bool()定义了bool运算符 ie 使类实例可以转换为bools


总之,第一个函数重载运算符(),而第二个函数重载运算符bool


一个例子

假设您想定义一个比较器并想知道它是否有效,因此您放置一个标志来了解这一点,因此您有以下内容。

struct Comparator{
    bool valid{};
    template<class T>
    bool operator()(const T& lhs, const T& rhs)const{
        return lhs<rhs;
    }
    explicit operator bool()const{
        return valid;
    }
};

int main(){
    Comparator x{true};
    std::cout <<((x) ? "x is valid": "x is not valid") << "\n";
    std::cout << "is 1 les than 2: " << std::boolalpha <<  x(1,2);
}
Run Code Online (Sandbox Code Playgroud)

这不是一个好的用例,但我想将两个运算符放在一个类中,以表示可以为同一个类定义它们。

bool运算符与可能处于无效状态的对象一起使用,例如智能指针和std::optional<T>,...

  • 如果您展示如何使用这两个运算符的示例,将会很有帮助。 (2认同)