我对()
运算符几乎没有疑问。请帮我明白一点。
()
运算符(()
运算符重载)的用法是什么。()
运算符使用的实际示例是什么(在哪些情况下,使用()
运算符非常有用,方便或适合。)答案 0 :(得分:5)
它主要用于函数对象来模拟函数调用。
#include <iostream>
struct Functor
{
void operator()() {
std::cout << "lol\n";
}
};
int main()
{
Functor f;
f(); // output: "lol"
}
一个人为的例子,是的,但是这会使构造函数参数变得更加复杂,比如说,存储这个仿函数以用于算法。它在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;
}
这个是有用的,因为operator[]
可能只接受一个参数(尽管该参数可以是初始化列表,这是一种解决方法)。
答案 1 :(得分:1)
()运算符用于制作所谓的函数对象aka“functor”
有一些非常有趣的事情,有一个函数对象可以做,包括传递一个函数对象作为参数。
我在下面发布的链接是我正在上课的一段视频,教授正在谈论仿函数。我发现它非常有用。 (注意:vid还讨论了类模板)