Вопрос о вызове функции C ++ - PullRequest
       5

Вопрос о вызове функции C ++

2 голосов
/ 21 сентября 2010

У меня есть вопрос о вызове функции в следующем примере:

int main()
{
    int a, b;
    cin  >> a >> b >> endl;
    cout << *f(a,b);
    return 0;
}

Так ли * f (a, b) допустимый вызов функции?

Редактировать :: извините заошибки, я исправил их сейчас, я немного устал

Ответы [ 4 ]

6 голосов
/ 21 сентября 2010

Код как минимум может быть разумным.Чтобы это работало, f должно быть определено как функция, которая возвращает любой из двух видов вещей: либо возвращает указатель, в этом случае * разыменовывает указатель, поэтому независимо от того, на что он указывал на отправляется на стандартный вывод.В противном случае f должен возвращать некоторый определенный пользователем тип, который определяет operator *, чтобы возвращать что-то, совместимое с cout.

6 голосов
/ 21 сентября 2010

Что бы ни было f, *f(a, b) пытается применить оператор косвенности к результату f(a, b).

Если f - указатель на функцию, и вы пытаетесь вызвать его, тогда как вы можете сделать это:

(*f)(a, b)

Просто сделать f(a, b) проще.

0 голосов
/ 21 сентября 2010

Очень сложно определить, является ли он действительным или нет, не зная, что такое 'f'.Но если он возвращает что-то, что может быть dereferenced, то он выглядит нормально, пока может быть напечатано значение 'dereferenced' (an overloaded operator <<) должно существовать для типа.

0 голосов
/ 21 сентября 2010

Я не думаю, что есть какой-то способ сказать, не видя определения f.C ++ требует много контекста, чтобы знать, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...