У меня есть вопрос о вызове функции в следующем примере:
int main() { int a, b; cin >> a >> b >> endl; cout << *f(a,b); return 0; }
Так ли * f (a, b) допустимый вызов функции?
Редактировать :: извините заошибки, я исправил их сейчас, я немного устал
Код как минимум может быть разумным.Чтобы это работало, f должно быть определено как функция, которая возвращает любой из двух видов вещей: либо возвращает указатель, в этом случае * разыменовывает указатель, поэтому независимо от того, на что он указывал на отправляется на стандартный вывод.В противном случае f должен возвращать некоторый определенный пользователем тип, который определяет operator *, чтобы возвращать что-то, совместимое с cout.
f
*
operator *
cout
Что бы ни было f, *f(a, b) пытается применить оператор косвенности к результату f(a, b).
*f(a, b)
f(a, b)
Если f - указатель на функцию, и вы пытаетесь вызвать его, тогда как вы можете сделать это:
(*f)(a, b)
Просто сделать f(a, b) проще.
Очень сложно определить, является ли он действительным или нет, не зная, что такое 'f'.Но если он возвращает что-то, что может быть dereferenced, то он выглядит нормально, пока может быть напечатано значение 'dereferenced' (an overloaded operator <<) должно существовать для типа.
'f'
dereferenced
'dereferenced'
(an overloaded operator <<)
Я не думаю, что есть какой-то способ сказать, не видя определения f.C ++ требует много контекста, чтобы знать, что происходит.