[解決済み] C++の'struct'と'typedef struct'の違い?
質問
で C++ の間に何か違いがあるのでしょうか?
struct Foo { ... };
とします。
typedef struct { ... } Foo;
解決方法は?
C++では、微妙な違いしかありません。 違いが出るのはCからの持ち越しです。
C言語規格(
C89 §3.1.2.3
,
C99 §6.2.3
そして
C11 §6.2.3
) は、以下のような異なるカテゴリの識別子のために別々の名前空間を義務付けています。
タグ識別子
は
struct
/
union
/
enum
) と
通常の識別子
(の場合
typedef
などの識別子がある)。
とだけ言われたら。
struct Foo { ... };
Foo x;
を実行すると、コンパイラーエラーが発生します。
Foo
はタグの名前空間のみで定義されています。
と宣言することになる。
struct Foo x;
を参照したい場合は、いつでも
Foo
というように、常に
struct Foo
. これはすぐに煩わしくなってしまうので、このような場合は
typedef
:
struct Foo { ... };
typedef struct Foo Foo;
現在
struct Foo
(タグの名前空間内)と、単なる
Foo
(通常の識別子の名前空間) はどちらも同じものを参照しており、自由に
Foo
を使用せずに
struct
キーワードを使用します。
構築物です。
typedef struct Foo { ... } Foo;
は単に宣言の省略形であり
typedef
.
最後に
typedef struct { ... } Foo;
は無名構造体を宣言し
typedef
を使用します。 したがって、この構成では、タグの名前空間には名前を持たず、typedef の名前空間にのみ名前を持つことになります。 つまり、前方宣言もできない。
前方宣言を行う場合は、タグの名前空間で名前を付けなければなりません。
.
C++では、すべての
struct
/
union
/
enum
/
class
宣言は、暗黙の了解のように動作します。
typedef
'ed、ただし同名の他の宣言によって名前が隠されていない限り。 参照
Michael Burrの回答
をご覧ください。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] .NETにおけるstructとclassの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる