Zeiger per Referenz als const übergeben; Warum so umständlich?
-
Hi,
wenn ich z.B. folgende Methode habe:
void f( const CDummy*& param );und diese von irgendwo aufrufen will, z.B. so:
... CDummy* d = new CDummy[5]; ... f(d);Dann geht das nicht, weil der Compiler CDummy* nicht nach const CDummy*& konvertieren kann. Wenn ich aber z.b. sowas mache:
... CDummy* d = new CDummy[5]; ... const CDummy* pTmp = d; f(pTmp);Dann geht es natürlich. Ist aber halt nur ziemlich nervig, weil das so umständlich ist.
-
Wieso willst du den Zeiger denn per konstanter Referenz übergeben?
-
Arki schrieb:
void f( const CDummy*& param );Hallo Leute. Bin nach wie vor C++-Noob und kenne folgenden Ausdruck nicht...
*&Weiß zwar was beide Zeichen tun wenn man man sie einzeln verwendet, aber diese Kombination habe ich noch nie gesehen.
Kann mir da jemand vielleicht ein Schlagwort nennen ? (Bitte nicht "Google")Danke
Blue
P.s.: Ups, hätte ich vielleicht nen eigenen Thread für die Frage aufmachen sollen ?
-
Dann lös doch beide Zeichen nacheinander auf - das Konstrukt ergibt eine Referenz auf einen Zeiger auf einen 'const CDummy').
-
int a = 44; // normale int definition /* Speicher ( Adresse:Name:Wert) ----------------------- | 1000 | a | 44 | ----------------------- | 1004 | | | ----------------------- */ int *p = &a; // Zeiger auf ein int /* Speicher ( Adresse:Name:Wert) ----------------------- | 1000 | a | 44 | ----------------------- | 1004 | p | 1000 | ----------------------- */ int &ref1 = a; // Referenz auf ein int /* Speicher ( Adresse:Name:Wert) -------------------------- | 1000 | a & ref1 | 44 | -------------------------- | 1004 | p | 1000 | -------------------------- */ int *&ref2 = p; // Referenz auf ein Zeiger-int /* Speicher ( Adresse:Name:Wert) -------------------------- | 1000 | a & ref1 | 44 | -------------------------- | 1004 | p & ref2 | 1000 | -------------------------- */ void func( int*& refPtr ); void func(p); // refPtr in func() ist jetzt nur ein anderer Name für den Pointer der übergeben wurde ...
-
Ahh, ich verstehe....
Danke, schöne Erklärung.Gruß
Blue
-
@Arki:
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17Ist genau das gleiche.
Wenn du aus dem "Foo const*&" ein "Foo const*const&" machst geht es.