Der formale Grund zu schreiben ist, dass int*
und const int*
unterschiedliche Typen sind, und die Umwandlung erzeugt eine temporäre, und man kann nicht eine nicht konstante Referenz auf ein temporäres binden.
So dass es ein Verweis auf const Zeiger funktionieren würde:
const int * const &a = b;
für ein motivierendes Beispiel, nehmen wir an, dass dies erlaubt wurden:
int* p = nullptr;
const int*& rp = p;
rp
und p
jetzt auf das gleiche Objekt beziehen.
Lassen Sie uns eine const int
machen.
const int y = 1;
zuordnen const int*
-const int*
sollte sicher sein, nicht wahr ?.
rp = &y;
Jetzt, da *p
nicht const ist, dass wir einen neuen Wert zuweisen können:
*p = 0xbaad1dea;
Aber p
ist das gleiche Objekt wie rp
und *rp
ist y
so *p
ist auch y
und y
ist const
und jetzt sind wir im Land des undefinierten Verhaltens.
Der Grund dafür ist [hier erklärt] (http://c-faq.com/ansi/contmismatch.html) in Bezug auf Zeiger. Betrachte folgendes: 'const int i = 0; int * p; const int * & z = & p; z = & i; '-' p' kann nicht auf 'i' zeigen. Wenn diese Konvertierung jedoch erlaubt ist, können Sie 'p' durch die Referenz ändern, um auf' i' zu zeigen und diese verwenden, um 'i' zu ändern. – chris