为什么 operator() 有奇怪的行为?
Why strange behaviour with operator()?
我有简单的class,
class Func
{
public:
Func()
{
cout<<"Constructor"<<endl;
}
int operator()(int)
{
cout<<"Operator ()";
return 0;
}
};
- 当我通过给圆括号
Func f();
创建它的对象时,它什么都不打印,它应该打印 Constructor。但是当我创建不带括号的对象时,它会打印 Constructor 这是预期的。这两者有什么区别?
- 当我尝试使用 operator()
f(2)
时出现编译错误。
error C2660: 'f' : function does not take 1 arguments
这不是奇怪的行为还是我遗漏了什么?
Func f();, it prints nothing, it should print Constructor
这根本不是真的。
创建 Func
的方法如下:
Func f;
When I try to use operator() f(2) it gives me compilation error. error C2660: 'f' : function does not take 1 arguments. Isn't it strange behaviour or I am missing something?
是的,这很奇怪,但并不意外。当您编写 Func f()
时,您声明了一个名为 f
的函数返回一个 Func
。在那之后你尝试用 f
做的所有事情,自然地,都会被破坏。
这里有点意思。
Func f();
是一个函数的前向声明,它没有参数,return Func 类型对象。
检查下面的代码:
#include <iostream>
using namespace std;
class Func
{
public:
int operator()(int)
{
return 0;
}
};
int main ()
{
Func f();
f();
return 0;
}
Func f ()
{
cout << "My Func" << endl;
Func * f = new Func;
return *f;
}
它将在标准输出上输出 "My Func"。
我有简单的class,
class Func
{
public:
Func()
{
cout<<"Constructor"<<endl;
}
int operator()(int)
{
cout<<"Operator ()";
return 0;
}
};
- 当我通过给圆括号
Func f();
创建它的对象时,它什么都不打印,它应该打印 Constructor。但是当我创建不带括号的对象时,它会打印 Constructor 这是预期的。这两者有什么区别? - 当我尝试使用 operator()
f(2)
时出现编译错误。
error C2660: 'f' : function does not take 1 arguments
这不是奇怪的行为还是我遗漏了什么?
Func f();, it prints nothing, it should print Constructor
这根本不是真的。
创建 Func
的方法如下:
Func f;
When I try to use operator() f(2) it gives me compilation error. error C2660: 'f' : function does not take 1 arguments. Isn't it strange behaviour or I am missing something?
是的,这很奇怪,但并不意外。当您编写 Func f()
时,您声明了一个名为 f
的函数返回一个 Func
。在那之后你尝试用 f
做的所有事情,自然地,都会被破坏。
这里有点意思。
Func f();
是一个函数的前向声明,它没有参数,return Func 类型对象。
检查下面的代码:
#include <iostream>
using namespace std;
class Func
{
public:
int operator()(int)
{
return 0;
}
};
int main ()
{
Func f();
f();
return 0;
}
Func f ()
{
cout << "My Func" << endl;
Func * f = new Func;
return *f;
}
它将在标准输出上输出 "My Func"。