2

私はC++標準ドキュメントのクラスについてこれを読みました:

クラスはタイプです。その名前は、そのスコープ内でクラス名(9.1)になります。

class-name: identifier template-id

私はC++標準の識別子のこの文法を見つけました:

 2.10 Identifiers
 identifier: nondigit
 identifier nondigit
 identifier digit

 nondigit: one of universal-character-name 
 _ a b c d e f g h i j k l m n o p q r s t u  v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
 digit: one of 0 1 2 3 4 5 6 7 8 9

今私はこれをやってみました:

class
{
public:
  int i;
};

名前がなくても正常にコンパイルされます。

誰かがこれについて私に説明できますか?識別子に指定された文法に違反していませんか?


Nawazは、私が提供したコードの標準準拠に関してフォローアップの質問をしました。興味のある方はこちらでチェックしてください

4

4 に答える 4

7

文法が進む

class-specifier:
    class-head { member-specification_opt }

class-head:
    class-key attribute-specifier-seq_opt class-head-name class-virt-specifier-seq_opt base-clause_opt
    class-key attribute-specifier-seq_opt base-clause_opt

class-key:
    class
    struct
    union

あなたの場合、 の 2 番目のプロダクションclass-headが使用されclass-nameています。

于 2012-10-30T08:11:15.910 に答える
0

識別子は完全に省略されているため、識別子の正しい文法の問題は議論の余地があります。説明には、識別子が存在する必要があるとは書かれていません。匿名クラスは、次のような構造を許可する C 構造体規則との一貫性のためにおそらく許可されます。

typedef struct { int i; } Foo;

struct { int x, y; } points[] = { {1, 2}, {3, 4} };

これがクラスで行われるのを見たことがないと思います。

于 2012-10-30T08:08:24.590 に答える
-1

コードclass { int i; };は完全に標準に準拠しています。匿名クラスとは関係のない標準からの無関係な参照を引用しました。

于 2012-10-30T08:08:05.487 に答える