C/C++マニアック雑記2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
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 *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はこのメソッド内でクラスの変数...
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],。(`ω´#)。なんじゃこりゃ...
終了行:
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 *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はこのメソッド内でクラスの変数...
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],。(`ω´#)。なんじゃこりゃ...
ページ名: