Welche bahnbrechenden Änderungen werden in C 11 eingeführt?
Eine der wesentlichen Änderungen, die in C 11 eingeführt wurden, ist der explizite Operator bool() in die Standardbibliothek, die Instanzen des Operators void*() ersetzt. Mit dieser Änderung sollte zwar ungültiger Code behoben werden, es sind aber auch andere potenziell wichtige Änderungen zu berücksichtigen.
Kernsprachinkompatibilitäten
-
Geänderte Interpretation von String-Literalen: Vordefinierte Makros wie „u8“ können Zeichenfolgenliterale ändern.
-
Benutzerdefinierte Zeichenfolge Literale: „_x“ in String-Literalen erstellt jetzt benutzerdefinierte String-Literale, anstatt Makros zu erweitern.
-
Neue Schlüsselwörter: Eingeführte Schlüsselwörter wie „constexpr“ und „thread_local“ können Brechen Sie vorhandene Bezeichnernamen auf.
-
Integer-Literal-Änderungen: Ganzzahlige Literale, die den Bereich von „long“ überschreiten, können jetzt zu „long long“ werden.
-
Änderungen der Ganzzahldivision: Das Rundungsverhalten der Ganzzahldivision von C 03 kann sich von der Rundung in Richtung 0 von C 11 unterscheiden.
-
„auto“ als Speicherspezifizierer: C 03-Code mit „auto“ als Speicherspezifizierer kann ungültig werden.
-
Einschränkende Konvertierungen: C 03 einschränkende Konvertierungen (z. B. double zu int) können jetzt ungültig sein.
-
Implizite Löschungen spezieller Mitgliedsfunktionen: Schlecht geformte implizit definierte Mitgliedsfunktionen werden automatisch erkannt gelöscht.
-
Destruktor-Ausnahmespezifikationen: Vom Benutzer deklarierte Destruktoren haben jetzt implizite noexclusive(true)-Spezifikationen.
-
"export"-Deklarationsbeseitigung: C 03-Deklarationen mit „Export“ sind jetzt ungültig.
-
Vorlage Abschließende Änderung: „>>“ in Vorlagen können jetzt zwei Vorlagen schließen, anstatt nur als Verschiebungsoperator berücksichtigt zu werden.
-
Abhängige Aufrufe interner Verknüpfungsfunktionen:Abhängige Aufrufe interner Verknüpfungsfunktionen sind jetzt zulässig.
Bibliothek Änderungen
-
Namespace-Bezeichner:Bezeichner, die der Standardbibliothek hinzugefügt werden, können vorhandenen Code beschädigen.
-
Header Enthält: Bisherige Header befindet sich in bestimmten Standard-Headern (z. B. , ) ist möglicherweise an einen anderen Ort verschoben.
-
Namespace „posix“: Der Namespace „posix“ ist jetzt für zukünftige Standardisierungen reserviert.
-
Makrodefinitionen: Definieren „override“, „final“, „carries_dependency“ oder „noreturn“, wie Makros jetzt sein können ungültig.
Das obige ist der detaillierte Inhalt vonWelche wichtigen Änderungen sollte ich bei der Migration auf C 11 beachten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!