Я хочу распечатать указатель на функцию cout и обнаружил, что он не работает. Но он работал после преобразования указателя на (void *), так что printf с% p, например
#include <iostream>
using namespace std;
int foo() {return 0;}
int main()
{
int (*pf)();
pf = foo;
cout << "cout << pf is " << pf << endl;
cout << "cout << (void *)pf is " << (void *)pf << endl;
printf("printf(\"%%p\", pf) is %p\n", pf);
return 0;
}
Я скомпилировал его с g++ и получил такие результаты:
cout < pf равно 1 cout < (void *) pf равно 0x100000b0c
printf ( "% p", pf) равен 0x100000b0c
Итак, что делает cout с типом int (*)()? Мне сказали, что указатель функции рассматривается как bool, правда ли это? И что делает cout с типом (void *)?
Спасибо заранее.
EDIT: Во всяком случае, мы можем наблюдать содержимое указателя функции, преобразовывая его в (void *) и распечатывая его с помощью cout. Но он не работает для указателей функций-членов, и компилятор жалуется на незаконное преобразование. Я знаю, что указатели на функции-члены представляют собой сложную структуру, отличную от простых указателей, но как мы можем наблюдать содержимое указателей на функции-члены?