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()?
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>,...
| 归档时间: |
|
| 查看次数: |
5516 次 |
| 最近记录: |