constとは定数を意味する すなわち一度代入されたら、変更が不可能なこと意味している これは言い換えたら コード安全性を向上させることに役立つ 特に関数の引数などに使う場合、その変数がポインタなどだった場合 関数内部で変更があるかどうかがわからない そこで関数の引数にconstが付いてある場合 その引数は関数内部で変更がないことを示している constポインタとconstメンバ変数 ポインタ変数に格納するアドレスを定数化するのがconstポインタ普通の変数と概念的には同じ constメンバ変数に関しては初期化子をつかわないと初期化できない うまい使い方すればコードの安全性があがるかなぁ・・・ (めんどくさいけどね) 下のコードにconstをまとめてみた #include <stdio.h> class ConstClass { private: const static int count[]; // 要素数書かなくても宣言可能 const int *num1; // 値書き換え不能 int *const num2; // アドレス書き換え不能 const int *const num3; // 値、アドレス書き換えともに不能 public: // constメンバ変数は初期化リストでしか初期化できない // 初期化のとき渡す引数に同じポインタを入れないように注意!! ConstClass(const int *a,int *const b,const int *const c):num1(a),num2(b),num3(c) { } void SetNum() { } void printNum1() { const int b[] = {4,5,6}; num1 = b; // 書き変わっちゃう printf("call printNum1\n"); for(int i = 0;i < 3;++i) { //num1[0] = 1; // エラー printf("%p %d\n",&num1[i],num1[i]); } printf("\n"); } void printNum2() { const int b[] = {4,5,6}; //num2 = b; // エラー printf("call printNum2\n"); for(int i = 0;i < 3;++i) { num2[i] = b[i]; // 書き変わっちゃう printf("%p %d\n",&num2[i],num2[i]); } printf("\n"); } void printNum3() { const int b[] = {4,5,6}; //num3 = b; // エラー printf("call printNum3\n"); // アドレスも値も変更できない for(int i = 0;i < 3;++i) { //num3[i] = b[i]; // エラー printf("%p %d\n",&num3[i],num3[i]); } printf("\n"); } // メソッド名constはクラスの変数に変更がないことを示している // メソッド名constはこのメソッド内でクラスの変数に変更がないことを示している void printStaticCount() const { printf("call printStaticCount\n"); for(int i = 0;i < 3;++i) { printf("%p %d\n",&count[i],count[i]); } } virtual ~ConstClass(){} }; // constな静的変数 const int ConstClass::count[] = {10,20,30}; int main() { int a[] = {1,2,3}; int b[] = {1,2,3}; int c[] = {1,2,3}; ConstClass test(a,b,c); // 初期化のとき渡す引数に同じポインタを入れないように注意!! // ConstClass test(a,a,a); test.printNum1(); test.printNum2(); test.printNum3(); test.printStaticCount(); return 0; } #vote((^ω^)ktkr[0],普通[0],。(`ω´#)。なんじゃこりゃああ[0])