6 Stimmen

Unterschied zwischen pass-by-reference & und *?

Was ist der Unterschied zwischen der Übergabe durch Verweis und der Verwendung der C-Zeiger-Notation?

void some_function(some_type& param)

und

void some_function(some_type *param)

Danke

4 Stimmen

Ich bezweifle, dass jemand eine der 1000 Anleitungen und Erklärungen, die es hier bereits gibt, reproduzieren wird. Werfen Sie einen Blick auf: parashift.com/c++-faq-lite/referenzen.html

7voto

David Harris Punkte 2294

Wenn Sie in einem Unterprogrammaufruf einen Zeiger auf eine Variable übergeben, wird die Adresse dieser Variable an das Unterprogramm übergeben. Um auf die Variable im Unterprogramm zuzugreifen, muss der Zeiger dereferenziert werden.

Wenn Sie einen Verweis auf eine Variable übergeben, kümmert sich der Compiler darum, die Adresse der Variablen zu ermitteln, wenn die Variable an das Unterprogramm übergeben wird, und die Variable im Unterprogramm zu derefenzieren.

0 Stimmen

Das ist definitiv KEIN syntaktischer Zucker. Es gibt Unterschiede, wie Sie vielleicht aus den anderen Antworten ersehen können.

0 Stimmen

Es gibt viele feine Unterschiede zwischen den beiden, denn eine Referenz ist ein Alias. Siehe unten.

6voto

Arkaitz Jimenez Punkte 21364
  • Sie können keine NULL-Referenz erhalten: Das allein gibt Ihnen viel Sicherheit
  • Sie können Ihre Referenz wie ein Objekt behandeln: Sie können sie derefenzieren oder was auch immer Sie brauchen.

Im Grunde genommen behandeln Sie einen sicheren Zeiger, als wäre es Ihr eigenes Objekt.

6 Stimmen

Können Sie leicht eine Null-Referenz erhalten, indem Sie einen Null-Zeiger dereferenzieren.

0 Stimmen

Ist das eine Abwehrhaltung oder Paranoia?

0 Stimmen

In der Regel handelt es sich eher um einen Fehler: Ihr Verweis bezieht sich auf ein Objekt, das zerstört wurde oder nie existiert hat. Berühmtes Beispiel: std::vector<int> myVec; myVec.front(); ... wie sehr bedauern Sie dann, dass std::vector<T>::front wirft nicht out_of_range!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X