13

古いおなじみのもの:

typedef int cute_int; //cute : common and familiar syntax. 

この構文は完璧です。問題ない。

上記のように typedef を記述できる場合、この構文を許可するポイントは何ですか。

int typedef crazy_int; //crazy : uncommon and unfamiliar syntax.

プログラマーを混乱させるためですか?この構文はどこでも必要ですか (実際には前の構文があるのに)? コンパイラの観点からはどう思いますか? 彼らはそれがかわいいと思いますか、それともクレイジーだと思いますか? それとも、コンパイラにはまったく関係ありませんか?


ちなみに、このコードはここから来ました : Use of typename keyword with typedef and new

これが構文エラーかどうか疑問に思っている場合は、ここの ideone で作業コードを確認してください。

4

4 に答える 4

10

問題は、「なぜ混乱するのか」です。

構文は、C++ の宣言指定子の文法に由来します。これは非常に一般的であり、C++ で多くのことに使用されます。宣言指定子の順序は重要ではありません。これを見て:

int virtual f() const, *g(int);
int ptr1, *ptr2;
int typedef const *name1, name2;

これらは次と同等です。

virtual int f() const;
virtual int* g(int);
int ptr1;
int *ptr2;
typedef const int* name1;
typedef const int name2;

それらを十分に長く見れば、構文が実際には統一されていて論理的であることがわかります。また、C++ の文法を読むことも役立つ場合があります。

于 2010-12-12T17:27:12.110 に答える
1

私のg ++​​はそれを受け入れるようですが、私はこの構文を知りませんでした...しかし、コンパイラの観点からすると、構文解析が難しくなりintます.と atypedefが起ころうとしています) または、変数/関数定義を解析しています...

それが持つ唯一の意味は、二項演算子であるA typedef Bと見なされる場合ですtypedef(型代入の意味で as A = B)。

于 2010-12-12T17:16:25.013 に答える
0

これが標準で許可されているかどうかはわかりません。しかし、私たちが知っているように、C++ には許可されていても非論理的な構文を持つものがたくさんあります。例えばこういうこと1[a], "hello"[2];// ...

于 2010-12-12T17:14:29.130 に答える