Funktionszeiger sind nicht in Datenzeiger umwandelbar. Sie würden einen Compilerfehler erhalten, wenn Sie versuchen würden, einen zu einer void*
Variable zuzuweisen. Aber sie sind implizit in bool
umwandelbar!
Deshalb wird die bool
Überlast für operator<<
über die const void*
gewählt.
Um die gewünschte Überladung zu erzwingen, müssten Sie eine sehr starke C++ - Umwandlung verwenden, die fast vollständig ignoriert die statischen Informationen.
#include<iostream>
using namespace std;
int add(int x, int y)
{
int z;
z = x+y;
cout<<"Ans:"<<z<<endl;
}
int main()
{
int a=10, b= 10;
int (*func_ptr) (int,int);
func_ptr = &add;
cout<<"The address of function add()is :"<< reinterpret_cast<void*>(func_ptr) <<endl;
(*func_ptr) (a,b);
}
anzumerken, dass Gieß- und Behandlungsfunktionszeiger als Datenzeiger ist nur bedingt unterstützt (aus dem C++ Standard-Standpunkt aus). Wenn Sie es für etwas anderes als das Zurücksetzen auf denselben Funktionszeiger verwenden, wird dies ein implementierungsspezifisches Ergebnis haben, das unter Compilern sehr groß sein kann.
Der Funktionszeiger wird implizit in Boolean umgewandelt. Es gab vor kurzem eine ähnliche Frage, – stefaanv
Mögliches Duplikat von [So drucken Sie Funktionszeiger mit cout?] (Http://stackoverflow.com/questions/2064692/how-to-print-function-pointers-with-cout) – stefaanv