ich gerade herausgefunden, dass der folgende Code keine gültigen C++ (es int
nach ~
analysiert nicht):Ist es legal, einen Destruktor auf int32_t aufzurufen?
int x = 5;
x.~int();
Allerdings ist der folgende Ausschnitt Arbeit:
int32_t x = 5;
x.~int32_t();
Dies liegt daran, int32_t
ist ein typedef
in meiner bestimmten Implementierung von C++, und ein Destruktor kann anscheinend auf jedem typendefinierten Typ aufgerufen werden.
Meine Frage ist: ist eine Implementierung von C++ erforderlich, um das zweite Snipped zu kompilieren? Insbesondere ist int32_t
garantiert, ein typedef zu sein, und ist der Compiler erforderlich, um eine Zerstörung eines typedef zuzulassen, wenn es typedef typedefs etwas zu int kennt?
Ja. 'int32_t' ist kein eingebauter Typ und es darf kein Makro sein. –
@ Cheersandhth.-Alf Der C++ 14-Standardentwurfsstatement 'typedef signed integer type int32_t;' als Definition von 'int32_t'. Soweit ich das beurteilen kann, bleibt nicht viel Platz für benutzerdefinierte Typen und alle oder gar ein Makro. – Downvoter
Um eine enge Frage/offenen Frage Krieg zu vermeiden, werde ich nicht wählen, um als Duplikat zu schließen, aber ... das ist ein Duplikat der verknüpften Frage. Nur weil diese andere Frage "int32_t" nicht erwähnt, heißt das nicht, dass diese andere Frage nicht auf Ihre Antwort antwortet. –