答えて
これは 'C'言語の二日酔いです。あなたはその後、
struct Pt { int x; int y; };
は、この構造体の変数を宣言する必要がある場合はCで
は、あなたがのtypedefは、あなたが
typedef struct { int x; int y; } Pt;
C
でこれを避ける助け
struct Pt p;
を行う必要があります
今できること
C++ではC.で
、それはCで行うようにそれは、C++には表記の利点を提供していないあなたは
Pt p;
を行うことを許可され
class Pt { int x; int y; };
ので、これは必要ではなかったですOTOHでは、この構文は構築や破壊のメカニズムを提供しないため、制限が生じます。
つまり、コンストラクタまたはデストラクタで名前のtypedef名を使用することはできません。
typedef class { int x; int y; } Pt;
Ptというコンストラクタやデストラクタも使用できません。 本質的に、ほとんどの場合、C++でこれを行うべきではありません。
ありがとう!どのようなCのbeneficeについて? Steve Jessopによって記述されたもののみ? – octoback
あなたは確かに 'Pt'から継承することができます –
" Cハングオーバー "のために"継承のためのメカニズムを提供していません "と –
この回答は、単に{}
ではなく、クラス内に興味深いコンテンツがいくつかあると仮定しています。
C++では、(Cとの互換性のために)クラスと同じ名前の関数を持つことができますが、決して望むことはほとんどありません。
typedefと同じ名前の関数を持つことはできません。これにより、厳格な名前の選択から保護されます。ほとんど誰も気にしない、とあなたが気にするつもりだ場合でも、あなたはおそらくそれを記述します
class Name {};
typedef Name Name; // reserve the name
あなたが参照しているコードが実際に書かれたようであれば(私はあなたに従うことによってそれを見ることができませんあなたが空のクラスName
を呼び出すのはなぜですか?)しかし、上記の考慮のために修正されました。
- 1. C#typedefが
C.の遺産は使用しないでください。 –
私は個人的にこの質問がdownvotesに値するとは思わない。私はそれを使用することに対してもアドバイスをしますが、公正な質問です。たぶん説明**なぜ**ここで良いでしょう。 –
@IvayloStrandjev - 同意した、私は同じことを書いていただけだった。それは本当に醜く不必要で、私はちょっと驚いています。これはIBMの文書で使われています。 –