Welche Änderungen, die in C ++ 14 eingeführt werden, können möglicherweise ein in C ++ 11 geschriebenes Programm unterbrechen?
Einführung
Mit der C++14 (aka. C++1y) - Standard in einem Zustand nahe zu sein Letzte, Programmierer müssen sich selbst Fragen, über die rückwärts-Kompatibilität und die Themen, die im Zusammenhang mit solchen.
Die Frage
In den Antworten der diese Frage es wird festgestellt, dass der Standard hat eine Anhang gewidmet, um Informationen über änderungen zwischen den Revisionen.
Wäre es hilfreich, wenn diese potenziellen Probleme in den zuvor genannten Anhang erklärt werden könnte, vielleicht mit Hilfe der formalen Dokumente, die im Zusammenhang zu dem, was dort erwähnt.
- Nach dem Standard: Welche änderungen eingeführt in C++14 kann möglicherweise brechen Sie ein Programm, geschrieben in C++11?
InformationsquelleAutor der Frage Filip Roséen - refp | 2014-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
C++11 vs C++14was bedeutet der Standard sagen?
Den Standard-Entwurf (n3797) hat einen speziellen Abschnitt für diese Art von Informationen, wo Sie beschreibt die (potenziell brechen) Unterschiede zwischen einer revision der Norm, und anderen.
Diesem Beitrag verwendet hat, dass Abschnitt
[diff.cpp11]
als Grundlage für ein semi-aufwendige Diskussion über die änderungen, die Einfluss auf den code für C++11aber zusammengestellt als C++14.C. 3.1] Ziffer Separatoren
Den digit separator eingeführt wurde, so dass man, in einem besser lesbaren Weise, schreiben von numerischen literalen und teilen Sie Sie in einer Weise, die Natürliche Art und Weise.
Es ist leicht zu sehen, dass (2) ist viel einfacher zu Lesen als (1) in das obige snippet, während die beiden Initialisierungen haben den gleichen Wert.
Die Fragen in Zusammenhang mit dieser Funktion ist, dass die single-quote immer bezeichnet den Beginn/das Ende eines Zeichen-literal in C++11aber in C++14 eine single-quote kann es sich entweder um einen Zeichen-literaloder in der vorher gezeigten Weise (2).
Beispiel-Snippet, legal in beide C++11 und C++14aber mit unterschiedlichen Verhalten.
( Hinweis: Mehr Informationen bezüglich single-quotes als Ziffer Separatoren finden in n3781.pdf )
C. 3.2] Große Deallocation
C++14 stellt die Möglichkeit, deklarieren Sie eine Globale überlastung der
operator delete
geeignet für große deallocationetwas, was nicht möglich war, in C++11.Allerdings den Standard auch Mandate, die ein Entwickler kann nicht erklären, nur eines der beiden verwandten Funktionen unten, es zu erklären, entweder keineoder beide; das heißt, in [neue.löschen.single]p11.
Weitere Informationen über das potentielle problem:
( Hinweis: Mehr von Interesse ist, die im Papier mit dem Titel n3536 - C++ - Größe Zuordnungseinheitengeschrieben von Lawrence Crowl )
C. 3.3]
constexpr
member-Funktionen, die nicht mehr implizitconst
Gibt es viele änderungen constexpr in C++14, aber das nur ändern, wird sich ändern Semantik zwischen C++11und C++14 wird die constantness einer member-Funktion gekennzeichnet constexpr.
Die Logik hinter dieser änderung ist es constexpr member-Funktionen zu mutieren, das Objekt, zu dem Sie gehören, etwas, das ist erlaubt, weil die Entspannung von constexpr.
Empfohlenes material auf diese änderung, und warum es wichtig genug ist, um potentielle code-Bruch:
Beispiel-snippet, legal in beide C++11 und C++14aber mit unterschiedlichen Verhalten
C. 3.4] die Entfernung von
std::gets
std::bekommt
wurde entfernt aus der Standard-Bibliothek, weil es als gefährlich gelten.Den daraus resultierenden Konsequenzen ist natürlich, dass der Versuch, kompilieren Sie code für C++11, C++14, wo diese Funktion verwendet wird, wird wahrscheinlich nur das kompilieren fehlschlagen.
( Anmerkung: es gibt Möglichkeiten zum schreiben code , nicht scheitern zu kompilieren, und haben Verhalten sich anders, das hängt von der Entfernung der
std::gets
von der Standard-Bibliothek )InformationsquelleAutor der Antwort Filip Roséen - refp