Функция - параметр функции
От: Аноним  
Дата: 29.07.05 13:44
Оценка:
#include <iostream>

int f( int a ) 
{
    return a; 
}

void g( int h( int arg ) ) 
{
h(76);
}


int main()
{

    g( f );
    return 0;
}


Каким образом здесь передается f как параметр функции g? Трудно представить что "по значению",
но и не по указателю вроде как...
Re: Функция - параметр функции
От: Bell Россия  
Дата: 29.07.05 13:45
Оценка:
Здравствуйте, Аноним, Вы писали:


А>

А>void g( int (*h)(int) ) 
А>{
А>h(76);
А>}
А>
Любите книгу — источник знаний (с) М.Горький
Re: Функция - параметр функции
От: korzhik Россия  
Дата: 29.07.05 13:48
Оценка:
Здравствуйте, Аноним, Вы писали:


А>
А>#include <iostream>

А>int f( int a ) 
А>{
А>    return a; 
А>}

А>void g( int h( int arg ) ) // здесь h неявно интерпретируется как указатель, то есть void g(int(*h)(int arg))
А>{
А>h(76);
А>}


А>int main()
А>{

А>    g( f );  // здесь происходит неявное преобразование имени функции в указатель на функцию
А>    return 0;
А>}
А>


А>Каким образом здесь передается f как параметр функции g? Трудно представить что "по значению",

А>но и не по указателю вроде как...

В итоге f передаёься как указатель
Re[2]: Функция - параметр функции
От: Аноним  
Дата: 29.07.05 13:59
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:



А>>

А>>void g( int (*h)(int) ) 
А>>{
А>>h(76);
А>>}
А>>


Дело в том что если я внутри функции g() вызываю typeid(h).name(), то получаю строку int __cdecl (int), (в MSVC 7.1).
А если передаю явно указатель на функцию (как у Вас) то получаю int (__cdecl*) (int).
Вопрос: так если нет разницы — почему получается по-разному?
Re[3]: Функция - параметр функции
От: Кодт Россия  
Дата: 29.07.05 16:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Дело в том что если я внутри функции g() вызываю typeid(h).name(), то получаю строку int __cdecl (int), (в MSVC 7.1).

А>А если передаю явно указатель на функцию (как у Вас) то получаю int (__cdecl*) (int).
А>Вопрос: так если нет разницы — почему получается по-разному?

Тебя же не удивляет, что внутреннее представление ссылки совпадает с внутренним представлением указателя, а типы — разные?
Здесь тоже такая странность.

Ну а то, что указатель на функцию является функтором, наряду со ссылкой на функцию и самой функцией — т.е. можно в равной степени писать funptr() и (*funptr)() — такова особенность синтаксиса.
Перекуём баги на фичи!
Re: Функция - параметр функции
От: Lorenzo_LAMAS  
Дата: 29.07.05 16:32
Оценка:
8.3.5/3


.....................
The type of each parameter is determined from its own decl-specifier-seq and declarator. After determining the
type of each parameter, any parameter of type “array of T” or “function returning T” is adjusted to be
“pointer to T” or “pointer to function returning T,” respectively.
.............

Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.