Es ist durchaus üblich, dass alle Zeiger die gleiche Größe haben, aber es ist technisch möglich, dass Zeigertypen unterschiedliche Größen haben.
Aber dann bin ich auf diese Aussage gestoßen, die besagt:
Während Zeiger alle gleich sind Größe, da sie nur eine Speicheradresse speichern, müssen wir wissen, auf was für ein Ding sie zeigen.
Nun bin ich mir nicht sicher, welche der obigen Aussagen richtig ist. Die zweite zitierte Aussage scheint aus den C++-Notizen von Computer Science der Florida State University zu stammen.
Aus diesem Grund sollten meiner Meinung nach alle Zeiger die gleiche Größe haben:
1) Angenommen, wir haben:
Code: Select all
int i = 0;
void* ptr = &i;
Nun, ich denke, es gibt hier ein Problem, nämlich dass auf der rechten Seite ein int* mit einer Größe von 4 Bytes ist, während wir auf der linken Seite ein void* haben, das eine Größe von 2 Bytes hat. Wenn also die implizite Konvertierung von int* nach void* erfolgt, kommt es zu einem gewissen Informationsverlust.
2) Alle Zeiger enthalten Adressen. Da für eine bestimmte Maschine alle Adressen die gleiche Größe haben, ist es ganz natürlich (logisch), dass auch alle Zeiger die gleiche Größe haben sollten.
Daher denke ich, dass das zweite Zitat wahr ist.
Meine erste Frage ist, was der C++-Standard dazu sagt?
Meine zweite Frage ist, ob der C++-Standard Zeiger unterschiedlicher Größe zulässt. Gibt es dann einen Grund dafür? Ich meine, es erscheint mir etwas unnatürlich, zuzulassen, dass Zeiger unterschiedliche Größen haben (in Anbetracht der beiden Punkte, die ich oben erklärt habe). Ich bin mir also ziemlich sicher, dass das Standardkomitee bereits darüber nachgedacht hat (dass Zeiger unterschiedliche Größen haben können) und bereits einen Grund dafür hat, Zeiger unterschiedliche Größen zuzulassen. Beachten Sie, dass ich diese (zweite Frage) nur stelle, wenn der Standard Zeiger unterschiedlicher Größe zulässt.
Mobile version