2013-05-02 9 views
17

C++ 14が来ているようで、コンパイラはすでにこの新しいリビジョンのコア機能を実装しようとしています。私はGCC support for these core featuresを見ていて、バイナリリテラル部分について何か気づいた.GCCはそれらを実装しているが、GNUバイナリリテラルとC++ 14バイナリリテラルの間に違いがあるようだ。ここでは、両方のために、それぞれの参照は、次のとおりです。GCCバイナリリテラルとC++ 14の違いは?

私はGCCが違いを作るように見えるので、彼ら二人の間にいくつかの相違点を見つけることを試みたが、何かを見つけることができませんでした。起こりうる非互換性についてもっと知っていますか?

+0

最初のリンクは、CおよびC++言語へのGCCの既存の拡張機能のGCCのマニュアルです。 2番目のリンクは、標準C++に機能を追加する提案です。 –

+0

これは、バイナリリテラルが受け入れられているかどうかのステータスについてです。私はちょうどそれらの間の可能な使用法の相違について尋ねる。 – Morwenn

答えて

20

gcc 4.9でサポートを導入したcommit diffから、唯一の違いはgccがC++ 1yの言語機能としてバイナリリテラルを受け入れ、C++の場合はgcc拡張であると警告しないことです1yサポートが指定されています。実際の実装に変更はありません。以前

さて、 -std=c++1yない限り、指定された
warning : binary constants are a GCC extension 

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

に基づいています。私が探していた答えの種類はまさにありがとう! ;) – Morwenn

3

私はその違いが1つの拡張であると推測しています。それは、他のものが標準に準拠し、拡張機能を有効にせずにアクセス可能な間に、人々はそれを使用する傾向がありません。それは形式です。

0

あなたが指している最初の文書は、C言語の拡張としてのバイナリリテラルのGNU実装です(つまり、これはCの標準ではない機能であり、gccの拡張機能の実装方法を定義しています)。

2番目のドキュメントは、C++ 11言語にバイナリリテラルを追加する提案ですが、私が知っている限り、それは(*)でも受け入れられていません。つまり、標準C++の一部ではありませんgccが提供する言語拡張機能のままです。

私の知る限り、この機能はコンパイラ間では移植できませんが、ユーザ定義のリテラルを使用してC++ 11で独自のバイナリリテラル実装を定義できます。

(*)s/not accepted/N3485「プログラミングドラフトC++の標準」でバイナリリテラルの参照を見つけることはできませんが、C++の次の標準では受け入れられる機能かもしれません。

+1

私はそれが最近のブリストルの会議で受け入れられたと信じています。エディタがドラフトを更新するには時間がかかります。 n3485は6ヶ月前からhttps://github.com/cplusplus/draft/tree/master/papers – bames53

関連する問題