Ich implementiere einen Template-Pointer-Wrapper, ähnlich wie boost::shared_ptr
.
Ich habe einen Zeiger auf eine Ganzzahl ptrInt
.
Was ich tun möchte: Erhöht die Ganzzahl ptrInt auf.
Mein ursprünglicher Code war dies: *ptrInt ++;
, obwohl ich das auch mit (*ptrInt) ++;
Offenbar scheint dies jedoch nicht das zu tun, was ich erwartet habe.
Am Ende habe ich es mit *ptrInt += 1;
arbeiten lassen, aber ich frage mich:
*ptrInt ++;
? *ptrInt += 1;
? Die letzten beiden erhöhen beide das Objekt, also bin ich mir nicht sicher, warum du nicht gedacht hast, dass es funktioniert. Wenn der Ausdruck als Wert verwendet wird, gibt das letzte Formular den Wert nach dem Inkrementieren zurück, während die anderen den Wert vorher zurückgeben.
%Vor%oder
%Vor% *ptrInt ++
wird
erhöht ptrInt um 1
Dereferenz alter Wert von ptrInt
und (*ptrInt) ++
sowie *ptrInt += 1
werden tun, was Sie wollen.
Siehe Vorrang für den Operator .
(* ptr) ++ sollte es tun, es sei denn, Sie verwenden den Wert sofort. Verwenden Sie dann ++ * ptr, was aufgrund der Assoziation von rechts nach links mit ++ (* ptr) gleichzusetzen ist.
Nebenbei bemerkt, hier ist meine intelligente Pointer-Implementierung , vielleicht kann sie Ihnen helfen Schreiben Sie Ihre eigenen.
Der more elegante Weg ist, was auch immer Sie zuvor versucht haben. d. h. (*ptrInt) ++;
Da Sie damit nicht zufrieden sind, könnte es am Post-Inkrement liegen.
Angenommen, std::cout<<(*ptrInt) ++;
hätte Ihnen den nicht inkrementierten Wert angezeigt.
Versuchen Sie also, ++(*ptrInt);
anzugeben, was sich möglicherweise wie erwartet verhält.
*ptrInt++
erhöht in Ihrem Fall den Zeiger, nichts mehr (bevor er den Wert von der Position abliest, wird er weggeworfen. Natürlich, wenn Sie ihn in einem komplexeren Ausdruck verwenden, wird er ihn benutzen)
(*ptrInt)++
macht, was Sie suchen.