Kann eine Referenz nicht NULL sein oder NULL sein?

Habe ich gelesen, die aus der Wikipedia:

"Referenzen darf nicht null sein, während die Zeiger können; jede Referenz bezieht sich auf einen Gegenstand, obwohl es möglicherweise oder möglicherweise nicht gültig."

Aber ich glaube nicht, weil der folgende code, an, der compiler gibt keinen Fehler:

class person
{
  public:
    virtual void setage()=0;
};

int main()
{
  person *object=NULL;
  person &object1=*object;
}

Bitte erläutern Sie diesen Punkt.

  • Der Artikel sollte wohl sagen: "Jede Referenz, die in ein wohlgeformtes Programm bezieht sich auf ein Objekt." Die Dereferenzierung eines null-Zeiger ist natürlich schlecht ausgebildet.
  • Ich denke was Sie meinte war person &object1=object;, die in der Tat zu einem compiler-Fehler (nicht übereinstimmende Typen).
  • Und lasst uns nicht alle zu vergessen unsere Lieblings-Geschichte über null-Referenzen: gotw.ca/conv/002.htm
  • Die Dereferenzierung eines null-Zeiger führt zu undefiniertem Verhalten; Undefiniertes Verhalten bedeutet nicht, jedoch, machen ein Programm ill-formed.
  • Hoppla, du hast Recht. Besser wäre "...Referenz in einem gut definierten Programm... ist natürlich nicht definiert."?
  • Das klingt besser für mich. Und I LOLed auf den verlinkten GOTW. "Ich kann ihn lehren; er wird gezogen, um Undefiniertes Verhalten:" leider, ich habe Menschen kennen gelernt, wie das.
  • Natürlich, das Programm ist schlecht ausgebildet. Vor allem wegen der fehlenden int.
  • Nicht schon wieder... eine null-Referenz Diskussion... standard explizit Staaten (8.3.2/4) 'ein null-Verweis kann nicht existieren, in einem gut definierten Programm'

Schreibe einen Kommentar