2015-11-27 9 views
5

Gibt es einen integrierten Typ, der die gleiche Größe und Ausrichtung wie ein Zeiger hat? Es gibt std::intptr_t und std::uintptr_t, aber ich glaube, dass sie nicht die gleiche Ausrichtung wie ein Zeiger per se haben.Gibt es einen integrierten Typ, der die gleiche Größe und Ausrichtung wie ein Zeiger hat?

+2

Welchen Unterschied macht es? Das Aliasieren eines Zeigers mit einem ganzzahligen Typ ist sowieso ein undefiniertes Verhalten. –

+0

@BenVoigt Ich mache das nicht. Stattdessen berechne ich Datenstrukturlayouts zur Laufzeit für eine Implementierung einer virtuellen Maschine, und es ist einfacher, wenn ganze Zahlen das gleiche Layout wie Zeiger haben. – rightfold

+0

Aber wenn Sie Struktur-Layout zur Laufzeit tun, sollte die Ausrichtung kein Problem sein: Fügen Sie einfach explizite Padding-Felder überall dort die Abhängigen Ausrichtung Anforderungen wichtig und Sie sollten in Ordnung sein. – rodrigo

Antwort

4

Es ist nicht erforderlich, dass alle Zeigertypen dieselbe Größe und Ausrichtung aufweisen, wodurch es unmöglich ist, dass ein einzelner Integertyp die gleiche Größe und Ausrichtung wie alle Zeigertypen aufweist.

Sicherlich haben Object Pointer, Funktionszeiger und Pointer-to-Member unterschiedliche Anforderungen. Aber auf einigen Plattformen haben auch char* und int* unterschiedliche Größe.