У меня есть простой класс,Почему странное поведение с operator()?
class Func
{
public:
Func()
{
cout<<"Constructor"<<endl;
}
int operator()(int)
{
cout<<"Operator()";
return 0;
}
};
- Когда я создаю это объект, давая скобку,
Func f();
, он ничего не печатает, он должен печатать Constructor. Но когда я создаю объект без круглых скобок, он печатает Constructor, который ожидается. В чем разница между этими двумя? - Когда я пытаюсь использовать operator()
f(2)
, это дает мне ошибку компиляции.
ошибка C2660: 'е': функция не принимает аргументов 1
не правда ли странное поведение, или я что-то не хватает?
Потому что вы объявляете 'f' как функцию *, которая не принимает аргументов и возвращает объект' Func'. –
[самый неприятный парсинг] (http://stackoverflow.com/q/20529434/1708801) –
@ShafikYaghmour Не думайте, что это квалифицируется как «наиболее» досадно. Это ИМО зарезервировано для чего-то вроде 'Foo f (Bar(), Baz());' –