• ベストアンサー

typedefのスコープに関して。

タイトルの通りです。 C++のtypedefのスコープは、どのように定義されているのですか? ぐぐってもなかなか見つからなくて、ご存知の方がいらっしゃいましたら教えていただきたく思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

#2の方も書かれているように、普通の型と同じScopeになりますので、 class scopeやnamespace scope等でも宣言可能です。 定義という意味では、 仕様書(ISO/IEC14882:2003、またはJIS X3014)の「7.1.3 The typedef specifier」、 「Within the scope of its declaration, ....」の後くらいをどうぞ。

shirousa01
質問者

お礼

回答ありがとうございます。 なるほど、通常の型と同じくClass Scopeや、Namespace Scopeになるのですね。 本当は仕様書を読むのがよいのですが、仕様書を持っていなくて。 一応、大学の図書館に頼んであるので届いたら読んでみます。

その他の回答 (2)

回答No.2

ANo1> 『typedef』のスコープはファイル単位です。 間違いではないが正確ではない。 通常の変数等と同じく、ブロック内ならブロック・スコープ、 ブロック外ならファイル・スコープとなるはず。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★『typedef』をどこで宣言していますか? ・『typedef』のスコープはファイル単位です。 ・ヘッダファイルに記述していて、ソースファイルでそのヘッダを include していれば  そのソースファイルのみしか有効になりません。 ・だから、Windows.h ヘッダにもたくさんの『typedef』の宣言がありますが、それを  利用するには必ず『Windows.h』をインクルードするのです。 ・よって、インクルードしたファイルがスコープということです。 ・また『typedef』で再定義された型を使用する前に記述します。 ・こうしないと、エラーとか、警告メッセージが出ます。 最後に: ・『定義』と『宣言』のことばの区別が難しいですね。 ・『定義』は関数や変数の実体の事です。 ・『宣言』は関数のプロトタイプ宣言やグローバル変数の宣言などという使い方をします。 ・ことばの問題ですが『typedef』は『型』の再定義と表現しますが、実際には新しい型を  宣言(作る)します。 ・以上。おわり。