假设我们有下一个函数对象:
class foo{
private:
int counter;
public:
foo(int counter): counter(counter){}
foo& operator=(const foo& ){...}
bool operator() (int variable){....}
}
int main(){
foo f(4);
foo x(5);
x = f(4);
return 0;
}
编译器如何知道如何响应:
x = f(5)
?
我已经在网上和Stack中搜索了一段时间,并且没有找到确切的答案,如果是重新发布,请告诉我,我会删除这个问题。
答案 0 :(得分:4)
这取决于"(5)"用于构造对象或调用已存在的对象:
foo f(5); // calls the constructor
f(5); // calls operator()
答案 1 :(得分:0)
我添加了一个名为eval
的简单方法来解释它:
class foo {
private:
int counter;
public:
foo(int counter): counter(counter) {}
bool operator() (int variable) {
return variable < counter;
}
bool eval(int variable) {
return variable < counter;
}
};
foo
是一个类而非方法。foo
的实例可以像方法一样使用。调用foo(5)
会创建一个foo
的实例,其中counter = 5
。
eval
是foo
的成员函数。 (目前这与()
运算符相同)
您可以像这样致电eval
:
foo f = foo(5); // create an instance of `foo`
f.eval(3); // returns true -> 3 < 5
f.eval(0); // returns false -> 6 < 5
您还可以使用()
运算符:
foo f = foo(5); // create an instance of `foo`
f(3); // returns true -> 3 < 5
f(0); // returns false -> 6 < 5
注意:强>
你也可以写(但不要这样做):
foo f = foo(5); // create an instance of `foo`
f.operator()(3); // returns true -> 3 < 5
f.operator()(0); // returns false -> 6 < 5