【C++】宣言と定義の早見表
宣言と定義の早見表
宣言だけの書き方は忘れがちなので早見表を作ってみました。
注意 : 一応コンパイルが通ることを確認していますが、もしかしたら間違った書き方をしているかもしれません。
宣言のみ | 定義(宣言を含む場合あり) | 備考 | |
---|---|---|---|
グローバル変数 | extern int a; | int a; | グローバルスコープ |
static変数 | 不可 | static int a; | |
ローカル変数 | 不可 | int a; | 関数スコープ |
関数 | int func( void ); | int func( void ){ return 0; } | |
static関数 | static int func( void ); | static int func( void ){ return 0; } | 定義のstaticは任意 |
inline関数 | inline int func( void ); int func2( void ); | int func( void ){ return 0; } inline int func2( void ){ return 0; } | inlineは宣言か定義どちらかにあればよい |
関数テンプレート | template<class T> int func( void ); | template<class T> int func( void ){ return 0; } | |
クラス | class A; | class A{}; | struct、unionも同じ |
メンバ変数 | 不可 | class A { int a; }; | |
staticメンバ変数 | class A { static int a; }; | int A::a; | |
メンバ関数 | class A { int func( void ); }; | int A::func( void ){ return 0; } | |
仮想関数 | class A { virtual int func( void ); }; | int A::func( void ){ return 0; } | |
staticメンバ関数 | class A { static int func( void ); }; | int A::func( void ){ return 0; } | |
inlineメンバ関数 | class A { inline int func( void ); int func2( void ); }; | int A::func( void ){ return 0; } inline int A::func2( void ){ return 0; } | inlineは宣言か定義どちらかにあればよい |
メンバ関数テンプレート | class A { template<class T> int func( void ); }; | template<class T> int A::func( void ){ return 0; } | |
クラステンプレート | template<class T> class A; | template<class T> class A{}; | |
メンバ関数テンプレート (クラステンプレート内) | template<class T> class A{ template<class U> int func( void ); }; | template<class T> template<class U> int A<T>::func( void ) { return 0; } | |
enum | 不可 | enum A{}; |
宣言のみのもの
宣言のみ | 定義 | 備考 | |
---|---|---|---|
typedef宣言 | typedef int MyInt; | なし | |
friend宣言 : クラス | class A { friend class B; }; | なし | |
friend宣言 : クラステンプレート | class A { template<class T> friend class B; }; | なし | |
friend宣言 : 関数 | class A { friend int func( void ); }; | なし | |
friend宣言 : 関数テンプレート | class A { template<class T> friend int func( void ); }; | なし | |
friend宣言 : メンバ関数 | class A { friend int B::func( void ); }; | なし | |
friend宣言 : メンバ関数テンプレート | class A { template<class T> friend int B::func( void ); }; | なし | |
friend宣言 : クラステンプレートのメンバ関数 | class A { template<class T> friend int B }; | なし | |
friend宣言 : クラステンプレートのメンバ関数テンプレート | class A { template<class T> template<class U> friend int B }; | なし | template<class U>は 記述しなくてもコンパイル成功しました |
Ideoneメモ : https://ideone.com/KZoMtG