2

次のコードはC++で許可されていますか? a. foo() (「foo」の前のスペースに注意してください)

私はそうは思わないでしょうが、コンパイラは文句を言いません。

4

4 に答える 4

3

私の知る限り、コンパイラはすべての空白(タブ、改行、スペース)を文字列内(つまり「文字列内」)にない限り削除します。

[編集]演算子に空白を入れないでください(つまり、とはi++異なり、i+ +foo()は異なりfo o()ます)。

[編集]別の回答で述べたように、空白(スペース、タブ、改行、コメント)は、void bar()vsなどの演算子を区切るためにも使用されます。voidbar()

于 2013-03-14T13:23:21.320 に答える
3

はい、それは有効なC++コードです。

C++標準から -ANSIISOIEC 14882 2003.pdf、第2.6章:

トークンには、識別子、キーワード、リテラル、演算子、その他の区切り文字の5種類があります。以下で説明するように、空白、水平タブと垂直タブ、改行、フォームフィード、およびコメント(総称して「空白」)は、トークンを区切る場合を除いて無視されます。

同じ章では、パンクチャレータートークンであると定義しています。

2.12章演算子と句読点.は、それが句読点であることを定義します。

于 2013-03-14T13:27:10.880 に答える
2

許可された。

.、、、など+の単なる演算子です。::->&&

あなたの場合、スペースは無視されます

一般的に言えば、レクサーがソースファイルからトークンを生成した後に削除されたスペース。

于 2013-03-14T13:22:55.453 に答える
2

CまたはC++のトークンの前後のどこにでも、スペースをいくつでも、または少なくすることができます。唯一のルールは、トークンは別のトークン(つまり、文字(AZ、az、_)または数字ではないもの)で区切る必要があるということです[関連する場合、トークンには。、+または-なども含まれる場合があります浮動小数点数として)。

それで

 a.foo()
 a. foo();
 a . foo (    ) ;
 a
   . 
foo 
  (
 )
;

すべて同じです。

ただし、特定のトークン、特に「文字と数字」のみで構成されるトークンの間にはスペースが必要です(上記を参照)。

voidfoo()

と同じではありません

void foo();
于 2013-03-14T13:25:12.413 に答える