我有简单的课程,
class Func
{
public:
Func()
{
cout<<"Constructor"<<endl;
}
int operator()(int)
{
cout<<"Operator ()";
return 0;
}
};
Func f();
创建它的对象时,它不打印任何内容,它应该打印 Constructor 。但是当我创建没有括号的对象时,它会打印出预期的 Constructor 。这两者之间有什么不同?f(2)
时,它会给我编译错误。 错误C2660:'f':函数不带1个参数
这不是奇怪的行为还是我遗失了什么?
答案 0 :(得分:3)
Func f();,它什么都不打印,应该打印构造函数
这不是真的。
以下是如何创建Func
:
Func f;
当我尝试使用operator()f(2)时,它给出了编译错误。错误C2660:&#39; f&#39; :function不带1个参数。这不是奇怪的行为,或者我错过了什么?
是的,这很奇怪,但并不出人意料。当您编写Func f()
时,您声明了一个名为f
的函数,返回Func
。在此之后你尝试用f
做的一切自然都会被打破。
答案 1 :(得分:1)
这里有点有趣。
Func f();
是函数的前向声明,它不接受任何参数并返回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;
}
它将输出&#34; My Func&#34;在stdout上。