Wenn Funktionspointer verwendet werden, was ist der Zweck der Verwendung des Address-of-Operators, anstatt ihn zu verwenden?

8

Warum würde ich für die folgenden Codeschnipsel eine Zuweisung zu einer anderen verwenden? thx

%Vor%     
jdl 31.03.2012, 16:40
quelle

4 Antworten

9

Der Zweck von einem über dem anderen ist C-Kompatibilität. C sagte, dass Funktionen automatisch zu Pointer-Funktionen ablaufen. Um kompatibel zu sein, musste C ++ dasselbe tun.

Beachten Sie, dass, wenn C ++ einen neuen Funktionszeigertyp (Elementfunktionszeiger) einführte, sie nicht automatisch abklingen. Wenn also das C ++ Komitee seinen Weg gehen würde, wären die Chancen gut, dass du & brauchst.

    
Nicol Bolas 31.03.2012, 17:10
quelle
3

Kürze, Stil. Dasselbe gilt für * , wenn Sie sie aufrufen.

Beachten Sie auch array vs &array[0] .

    
aib 31.03.2012 16:48
quelle
0

Aus dem Buch C ++ - Programmiersprache ist klar ersichtlich, dass die Operatoren & und * für Zeiger auf Funktionen optional sind:

  

Es gibt nur zwei Dinge, die man mit einer Funktion machen kann: Call it and take   seine Adresse. Der Zeiger, der erhalten wird, indem man die Adresse einer Funktion nimmt   kann dann verwendet werden, um die Funktion aufzurufen. Zum Beispiel:

%Vor%      

Der Compiler wird feststellen, dass efct ein Zeiger ist und den Aufruf aufrufen   Funktion wies auf. Das heißt, Dereferenzierung eines Zeigers zur Funktion   mit * ist optional. In ähnlicher Weise verwendet & amp; um die Adresse von a zu bekommen   Funktion ist optional:

%Vor%

Wie andere darauf hingewiesen haben, ist Zeiger auf Elementfunktion in C ++ neu / anders. % Co_de% ist nicht optional, um auf ein Element zu verweisen, und es wird als (in C ++ - Programmiersprachenbuch) erklärt:

  

Ein Zeiger auf ein Element kann durch Anwenden der Adresse-of erhalten werden   Bediener & amp; zu einem vollständig qualifizierten Klassenmitgliedsnamen, zum Beispiel   & amp; Std_interface :: suspend.

    
xaero99 31.03.2012 23:57
quelle
-1

Eine Funktion ist bereits ein Zeiger; Daher benötigen Sie den Adressoperator nicht.

    
Matthias 31.03.2012 16:42
quelle

Tags und Links