2010-09-21 4 views
2

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

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

Так * е (а, б) действительный вызов функции?

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

+4

Возможно, вам понравится расширение 'f'. – GManNickG

ответ

6

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

+0

Итак, если функция должна была вернуть сумму чисел, вызов недействителен? – Vlad

+1

@ Vlad: ответ зависит от типа *, используемого для хранения суммы. Если это 'int',' long', 'double' (и т. Д.), То no, not valid. Если это некоторый UDT, который определяет (унарный) 'operator *', то да (хотя последнее кажется маловероятным). –

+0

Хорошо, это отвечает на мой вопрос спасибо Джерри;) – Vlad

6

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

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

(*f)(a, b) 

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

+0

Нет f является функцией, не являющейся указателем на функцию ... – Vlad

+2

@ Vlad: Может быть, вы должны добавить это к вопросу, поэтому нам не нужно пытаться читать ваш ум, а? В этом случае он применяет косвенное отношение к тому, что возвращает 'f (a, b)'. (И если он не может этого сделать, ваша программа плохо сформирована. То есть 'f' должен либо вернуть указатель, либо тип класса с унарным' operator * 'перегруженным.) – GManNickG

0

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

+3

Больше комментариев, я думаю , – GManNickG

0

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

Смежные вопросы