16

プログラミング言語 C++ の名前は、親言語の C と ++ 演算子 (ほぼ間違いなく ++C である必要があります) に由来するため、式C++は C++ プログラムで自然に発生する可能性があります。2011 標準 (拡張子なし) を使用し、C++11 引用符内ではなく前処理後に式を含む有効な C++ プログラムを記述できるかどうか疑問に思っていました(注: 要件を編集しました。回答も参照してください)。

C++98明らかに、式orを使用して 2011 標準より前の C++ プログラムを作成できる場合C++03、答えは簡単な「はい」です。しかし、私はそれが可能だったとは思いません (私は本当に知りませんが)。では、C++11 の新しい武器庫でそれを行うことができますか?

4

3 に答える 3

8

C++11前処理後に、文字がリテラルの外にある必要がある場合はNOです。翻訳フェーズ 7 では、3 つのトークンがidentifier,++となるためです。integer-literal

最初の 2 つのトークンはpostfix-expressionで、後のトークンはprimaryです。

これらの 2 つの非終端記号を連続して含むことができる文法には制限がないため、これを含むプログラムC++11は構文解析に失敗します。

ただし、文字リテラルを文字列と見なさない場合は、ワイド文字リテラルに含めることができるため、答えはYESです。

int main()
{
    wchar_t x = L'C++11';
}

これはプリプロセッサまたは文字列リテラルを使用せず、この構造は標準でサポートされている必要があります。

複数の c-char を含むワイド文字リテラルの値は実装定義です。

于 2013-04-05T23:32:01.773 に答える
0

「有効な C++ プログラム」を定義します。

C++ 標準では、「整形式の C++ プログラム」を「構文規則、診断可能なセマンティック規則、および 1 つの定義規則に従って構築された C++ プログラム」と定義しています。これにより、整形式ではない C++ プログラムの可能性が残されます。(C には、準拠しているが厳密には準拠していないプログラムの概念が明示的にあります。たとえば、特定のコンパイラの拡張機能を使用するプログラムなどです。)

拡張機能を使用することが有効であると考える場合はC++11、一部のコンテキストで許可する C++ コンパイラを実装できます。

于 2013-04-06T09:51:30.777 に答える
0

では、C++11 の新しい武器庫でそれを行うことができますか?

いいえ。

于 2013-04-04T23:14:23.043 に答える