17

なぜ使用するのtypedef class {} Nameですか?

私はこれをIBMC++ドキュメントで学びましたが、ここで使用するためのヒントはありません。

4

2 に答える 2

31

これは「C」言語からの二日酔いです。

C では、

struct Pt { int x; int y; };

次に、この構造体の変数を宣言するには、次のことを行う必要があります

struct Pt p;

typedef は、C でこれを回避するのに役立ちました

typedef struct { int x; int y; } Pt;

今、あなたはすることができます

Pt p;

Cで。

C++ では、これはまったく必要ありませんでした。

class Pt { int x; int y; };

あなたができるようにしました

Pt p;

C の場合のように、C++ では表記上の利点はありません。OTOH、この構文は構築または破棄のメカニズムを提供しないため、制限につながります。

つまり、コンストラクタまたはデストラクタで typedef name という名前を使用することはできません。

typedef class { int x; int y; } Pt;

Pt というコンストラクターもデストラクタも持つことはできません。したがって、本質的に、ほとんどの場合、これを C++ で行うべきではありません。

于 2013-03-19T14:07:18.827 に答える
3

この回答は、 だけでなく、クラスに興味深いコンテンツがあることを前提としてい{}ます。

C++ では、(C との互換性のために) クラスと同じ名前の関数を使用できますが、そうしたくないことはほとんどありません。

typedef と同じ名前の関数を持つことはできないため、これを行うことで、不適切な名前の選択から保護されます。気にする人はほとんどいませんし、気にするつもりでも、おそらく次のように書くでしょう。

class Name {};
typedef Name Name; // reserve the name

あなたが参照しているコードが実際に書かれたとおりである場合(リンクをたどってもわかりません)、それはかなり似ていますclass Name {};(これは書くのが独特なことです、なぜ空のクラスを呼び出すのNameですか?)が、変更されました上記の考慮のために。

于 2013-03-19T14:07:01.120 に答える