【发布时间】:2015-02-19 04:36:39
【问题描述】:
我的课很简单,
class Func
{
public:
Func()
{
cout<<"Constructor"<<endl;
}
int operator()(int)
{
cout<<"Operator ()";
return 0;
}
};
- 当我通过给出括号
Func f();创建它的对象时,它什么也不打印,它应该打印 Constructor。但是当我创建没有括号的对象时,它会打印出预期的 Constructor 。这两者有什么不同? - 当我尝试使用 operator()
f(2)时,它给了我编译错误。
错误 C2660: 'f' : 函数不接受 1 个参数
这不是奇怪的行为还是我遗漏了什么?
【问题讨论】:
-
因为您将
f声明为一个不带参数并返回Func对象的函数。 -
@ShafikYaghmour 不要认为它是“最”令人烦恼的。这是 IMO 为
Foo f(Bar(), Baz());之类的东西保留的 -
@T.C.我问了斯科特这件事,他说它们都是最令人烦恼的解析
-
@ShafikYaghmour Scott Meyers?
标签: c++ constructor compiler-errors operator-overloading