我对()运营商的问题很少.请帮我明白一点.
()运算符(()运算符重载)的用途是什么.()操作员使用的实际例子是什么(在哪些情况下有用,方便或适合使用()操作员).它主要用于函数对象来模拟函数调用.
#include <iostream>
struct Functor
{
void operator()() {
std::cout << "lol\n";
}
};
int main()
{
Functor f;
f(); // output: "lol"
}
Run Code Online (Sandbox Code Playgroud)
一个人为的例子,是的,但是这对构造函数参数变得更加复杂,比如说,存储这个仿函数用于算法.它在C++标准库中很常见.
你不具备以这种方式来使用它; 另一个例子是模拟多维数组访问:
#include <vector>
template<typename T>
struct Matrix
{
Matrix(unsigned m, unsigned n)
: m(m), n(n), vs(m*n) {}
T& operator()(unsigned i, unsigned j)
{
return vs[i + m * j];
}
private:
unsigned m;
unsigned n;
std::vector<T> vs;
};
/**
* _~
* _~ )_)_~
* )_))_))_)
* _!__!__!_
* \______t/
* ~~~~~~~~~~~~~
*/
int main()
{
const unsigned int WIDTH = 3;
const unsigned int HEIGHT = 3;
Matrix<long> m(WIDTH, HEIGHT);
m(1,1) = 42;
}
Run Code Online (Sandbox Code Playgroud)
这个是有用的,因为operator[]可能只需要一个参数(尽管该参数可以是初始化列表,这是一种解决方法).