structName *& als Parameter Sinn?
-
Hallo,
und zwar habe ich folgendes gesehen bzw. auch schon selbst verwendet ohne den eigentlichen Sinn dahinter zu verstehen und zwar:
void fkt(structName *& pStruct)
{
pStrucht->.....
}Aber mir verschließt sich der eigentliche Sinn dahinter, ich habe doch schon durch (structName& pStruct) eine Referenz auf die Sturktur und könnte diese Verändern ohne den lästigen -> mitschleppen zu müssen.
Gibt es dahinter einen tieferliegenden Sinn noch einen Zeiger mit einzubauen?
Und könnte man einen solchen *& Parameter auch irgendwie const machen? Also in etwa void fkt(const structName *& pStruct) um zu verhindern das an der übergebenen Struktur etwas verändert werden kann? Konkret wird in einer Funktion nämlich nur 'ausgelesen' und nichts verändert.
Vielen Dank im Voraus
Andreas
-
Und hier noch eine interessantere Frage für mich in diesem Zusammenhang, wieso funktioniert das hier nicht:
class XYZ { public : struct hallo { int x; }; void printHallo(void) const { printHallo(Welt); } private: void printHallo(hallo *& pHallo) { cout << pHallo->x; } hFehlermeldung lautet ständig:
Fehler 1 error C2663: 'XYZ::printHallo': für 2 Überladung(en) gibt es keine zulässige Konvertierung für den this-Zeiger h:\Programmierung II\Spielwiese\Spielwiese\spiel.cpp 16
Das verstehe ich einfach nicht.
-
dieses beispiel veranschautlicht eine möglichkeit der anwendung.
natürlich kann man auch pointer auf pointer verwenden.der pointer (da als referenz übergeben) wird von &x auf &y umgebogen.
int x = 10; int y = 20; void func(int *& pint) { pint = &y; } int main(int, char**) { int* pint = &x; printf("%d\n", *pint); // 10 func(pint); printf("%d\n", *pint); // 20 }
-
class XYZ { public: struct hallo_s { unsigned int x; hallo_s() : x(0) {} }; void print_hallo() const { print(m_item); } private: void print(const hallo_s& hallo) const { std::cout << hallo.x << std::endl; } private: hallo_s m_item; };? so wäre es sinniger ^^
-
Anders gesagt: T*& macht Sinn als Typ eines Output Parameters (OUT oder IN, OUT), aber keinen Sinn als Typ eines Input Parameters.
-
Wow danke, jetzt langsam verstehe ich was C++ hier treibt bzw. der Code den ich vor die Nase gesetzt bekommen habe.
Mal schauen ob ich es so zum laufen kriege.
Ciao
Andreas
-
yup, für out/inout parameter für pointer notwendig
wobei out/inout verhalten kann man auch mit pointerpointern machen
int x = 10; int y = 20; void func(int** ppInt) { if (ppInt != NULL) //notwendiges übel, bei pointern weiss man nie ob's null sind *ppInt = &y; } int main(int, char**) { int* pInt = &x; printf("%d\n", *pInt); func(&pInt); printf("%d\n", *pInt); func(NULL); // potentielles !!EEK!! }achtung. konstrukte wie diese hier sind gefährlich

void func(sometyp*& ptyp) { ptyp = new sometyp; //funktion fungiert als datenquelle, und überlässt das löschen dem clientcode }