2013-05-02 10 views
17

C++ 14 scheint zu kommen und Compiler versuchen bereits, die Kernfunktionen dieser neuen Revision zu implementieren. Ich schaute mir GCC support for these core features an und bemerkte etwas über den Teil der binären Literale: GCC implementiert sie, scheint aber einen Unterschied zwischen GNU-Binärliteralen und C++ 14-Binärliteralen zu machen. Hier sind die jeweiligen Referenzen für beide:Unterschied zwischen binären GCC-Literalen und C++ 14 Einsen?

Ich habe versucht, einige Unterschiede zwischen den beiden von ihnen zu finden, da GCC, den Unterschied zu machen scheint, aber nichts gefunden. Weiß jemand von Ihnen mehr über mögliche Inkompatibilitäten?

+0

Der erste Link ist Dokumentation des GCC bestehender Erweiterung des GCC auf die C- und C++ Sprachen. Der zweite Link ist der Vorschlag, das Feature zu C++ hinzuzufügen. –

+0

Nun, ich weiß darüber und über den Status, ob binäre Literale akzeptiert wurden oder nicht. Ich frage nur nach den möglichen Nutzungsunterschieden zwischen ihnen. – Morwenn

Antwort

20

Von der commit diff, die Unterstützung in gcc 4.9 eingeführt, der einzige Unterschied ist, dass gcc jetzt akzeptiert binäre Literale als eine Sprachfunktion von C++ 1y, und warnt nicht, dass sie eine gcc-Erweiterung sind, wenn C++ 1y Unterstützung ist angegeben. An der tatsächlichen Implementierung ändert sich nichts.

Bisher:

warning : binary constants are a GCC extension 

Nun, es sei denn, -std=c++1y angegeben:

warning : binary constants are a C..1y feature or GCC extension 
+0

Genau die Art von Antwort, die ich suchte, danke! ;) – Morwenn

3

Ich vermute, dass der Unterschied ist, da man eine Erweiterung ist, dann würden die Leute nicht zu geneigt sein, es zu verwenden, während die andere standardkonform und zugänglich ist, ohne Erweiterungen zu aktivieren. Es ist eine Formalität.

0

Das erste Dokument, auf das Sie verweisen, ist die GNU-Implementierung von Binärliteralen als Erweiterung der C-Sprache (dh es ist ein nicht standardmäßiges Merkmal von C und dieses Dokument definiert, wie gcc eine Erweiterung der Sprache implementiert).

Das zweite Dokument, auf das Sie verweisen, ist ein Vorschlag zum Hinzufügen von Binärliteralen zur C++ 11-Sprache, aber soweit ich weiß, wurde es auch nicht akzeptiert (*) und bedeutet daher auch, dass es nicht Teil von C++ ist Es bleibt eine Spracherweiterung von gcc.

Soweit ich sehen kann, wäre diese Funktion in Compiler nicht portabel, aber Sie könnten Ihre eigene binäre Literal-Implementierung in C++ 11 definieren, indem Sie benutzerdefinierte Literale verwenden.

(*) s/nicht akzeptiert/Ich kann keinen Verweis auf Binärliterale in N3485 "Working Draft, Standard für Programmiersprache C++" finden, aber es könnte eine Funktion für den nächsten Standard von C++ akzeptiert werden.

+1

Ich glaube, es wurde auf dem letzten Treffen in Bristol angenommen. Der Editor benötigt Zeit, um den Entwurf zu aktualisieren. n3485 ist von vor 6 Monaten nach https://github.com/cplusplus/draft/tree/master/papers – bames53

Verwandte Themen