2011-01-08 2 views
2

Mögliche Duplizieren:
What does “Class* &cls” mean in C++'s function definition?Was ist das "&" hinter Variablen in C++ - Vorlagen?

stieß ich auf diesem Code:

template <class T,class U> void inline TIntDataSwap2(U data,T i) 
{ 
    unsigned char*& data2=(unsigned char*&)data; 
    data2[0]=(unsigned char)(((unsigned int)i>> 8)&0xff); 
    data2[1]=(unsigned char)(((unsigned int)i>> 0)&0xff); 
}; 

was ist die Bedeutung der "&" hinter "unsigned char *"?

Kann dies nur in Vorlagen verwendet werden? Ich habe es noch nie zuvor gesehen und "& hinter einer Variablen" ist schwer zu googeln, bitte helfen Sie mir ...

+1

Ich mochte den Ausdruck * "hinter einer Variablen" *. : D – Nawaz

Antwort

1

Die & ist nicht "hinter einer Variablen", sondern Teil des Typs.

Sie wissen wahrscheinlich bereits, was eine Referenz in C++ ist. In diesem Fall ist unsigned char *& nur ein Verweis auf einen Zeiger auf unsigned char. Diese

ist völlig unabhängig von Vorlagen und können innerhalb oder außerhalb einer Schablonendefinition verwendet werden,

+0

ich verstehe es nicht? Ich kenne nur "&" vor der Variable, um den Zeiger darauf zu bekommen. Was ist die Bedeutung eines "& hinter einem Typ-Spezifizierer" – user537836

+1

@ user537836 es ist eine [Referenz] (http://en.wikipedia.org/wiki/Reference_ (C% 2B% 2B)), und es ist ein wesentliches Konzept in C++ (der Wikipedia-Artikel wird Ihnen einige Einblicke geben, obwohl ich Ihnen empfehlen würde, ein [gutes C++ Buch] (http://stackoverflow.com/questions/388242) zu bekommen). – icecrime

+0

ok ich verstehe jetzt ... es ist so: void MultiplyByFive (int & number) {Nummer * = 5;} >> Aufruf von MultiplyByFive (i) <--EQUALS--> void MultiplyByFive (int * Nummer) {* Nummer * = 5;}> > Anruf durch MultiplyByFive (& i) – user537836

1

unsigned char*& ist ein Verweis auf einen Zeiger auf eine unsigned char. Lesen Sie immer die Zeiger/Referenz-Kombination von rechts nach links. Dies ist in keiner Weise auf die Verwendung innerhalb von Vorlagen beschränkt.

Normalerweise, wenn Sie ein Argument an eine Funktion übergeben, wird es durch Wert in C++ übergeben (auch riesige Objekte). Es wird eine Kopie erstellt, die an die Funktion übergeben wird. Dies verbraucht zusätzlichen Speicher und verhindert, dass die Funktion das übergebene Argument ändert (da es nur eine Kopie erhält). Mit einer Referenz erstellen wir keine Kopie, daher ist es speichereffizienter. Darüber hinaus kann die Funktion das Argument bei Bedarf ändern. Wenn Sie nur den Leistungszuwachs wünschen und nicht möchten, dass die Funktion das Argument ändert, können Sie den Parameter als const Referenz deklarieren.

+0

danke, ich habe noch nie Benutzte Referenzen vorher. Ich verstehe, dass Sie es von rechts nach links lesen, weil es so ist, wenn Sie Klammern setzen: ((unsigned char *) &) – user537836