ぼく用あれこれまとめ
C++の定数
最終更新:
bokuyo
-
view
C++の定数
#define unco 156
- マクロでの定数宣言。Cライクな書き方。
- 型が不鮮明だから、やめたほうがいい。
const int unco = 156;
- この書き方がC++ではベスト。
- 型が明瞭だから。
const int unco;
- これはコンパイルエラー。constは宣言時に初期化しないとだめ。
- あとで代入することもできないお。
class内でのメンバ変数でconstしちゃうと。
#include <iostream> class UNKO { const int num = 156; public: int GetNum(){return num;}; }; int main() { UNKO obj; std::cout << obj.GetNum() << std::endl; return 0; }
一見すると、「156」が表示されそうに思えますが
main.cpp(5)error C2864: 'UNKO::num' : static const int データ メンバー以外をクラス内で初期化することはできません main.cpp(12): error C2512: 'UNKO' : クラス、構造体、共用体に既定のコンストラクターがありません。
ってな感じでコンパイラから怒られます。
classの宣言部分で数値を代入することは通常できないからなのです。
なので、
classの宣言部分で数値を代入することは通常できないからなのです。
なので、
class UNKO { static const int num = 156; };
もしくはenumハックを使って、
class UNKO { enum {num = 156}; };
でおk。
class UNKO { const int num; public: UNKO(){num = 4;}; };
コンストラクタで代入しようと思ってこんなの書くとコンパイルエラーでおこられちゃうの。
constがついた変数は一度しか値を入れられないのが原則なの。だから
constがついた変数は一度しか値を入れられないのが原則なの。だから
UNKO():num(156){ ; };
ってな感じでコンストラクタを定義すると、見事const定数に数値を入れられる。
class UNKO { const int num; const float flow; const char* str; public: UNKO():num(156),flow(9.09f),str("DAYS"){ ; }; };
便利だけど、使えば使うほどコンストラクタのところにどばどばーと書かれるね。