Referenz oder Zeiger nötig

DuffCola

Mitglied
Hallo.
Wenn ich in einer Funktion oder in einem Konstruktor member initalisiere, ist es ja üblich, den parameter als Refrenz oder Zeiger zu übergeben.
Aber wenn ich mit diesem Parameter in dieser Funktion nur eine If anweisung durchführe, also keiner variable diesen Wert zuweise, ist es dann noch nötig den Parameter als Refrenz zu übergen?
Eigentlich doch nicht oder?
 
ist es ja üblich, den parameter als Referenz oder Zeiger zu übergeben.
Es kommt immer auf den Anwendungsfall an!

Hier eine ganz grobe Unterscheidung:
  • Referenz: Wert (nach außen hin) veränderbar.
  • Zeiger: Wert (nach außen hin) veränderbar; NULL als Wert (im Gegensatz zu Referenz) auch möglich.
In C++11 gibt es natürlich noch einen weiteren Typen.

Bei deinem Fall reicht ein normaler Pass-by-value Paramter.
 
Hallo DuffCola

Zuerst zum Verständnis:
Ich hoffe du meinst mit Zeiger nicht Raw-Pointer (von der Form T*) sondern die verfügbaren Pointerwrapper aus STL (oder boost, wenn du einen ganz alten Compiler verwendest) wie shared_ptr, weak_ptr, unique_ptr. Raw Pointer finden in modernem C++ nur noch in Extremfällen Verwendung.

Bezüglich pass-by-value vs pass-by-reference gibt es zwei Dinge zu unterscheiden:
1. Was willst du mit dem Parameter machen in der Funktion
2. Wie verhält sich der Typ des Parameters

Dabei kann 1. bereits ein Killerkriterium sein, wenn du nämlich den Parameter verändern willst kommst du nicht um pass-by-reference herum.

Bei 2. ist vor allem der Copy-Konstruktor interessant. Es gibt Typen die äusserst komplex zu kopieren sind (oder sich gar nicht kopieren lassen).

Meine Einstellung dazu ist eigentlich immer so:
Wenn es nicht einen Grund gegen pass by reference gibt (z.B. bool& kopiert 4 oder 8 bytes, während bool nur 1 byte kopiert), dann immer pass-by-reference.

Grüsse
Cromon
 
Zurück