のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

C++(C) 意外に知らないconst修飾子の使い方

Sponsored Links

皆さんこんにちは
お元気ですか。私は眠いです。

さて、今日はconst修飾子の使い方です。

constとは

基本的に内容を書き換えることができないものにつけくわえる修飾子(Javaでいうfinal)
なぜこんなのが必要なのでしょうか?

変数の値を保証したい時に使います。変えてほしくない値があったときにプログラムを書く時に変更されても困るので、このような形で実装することがあります。

constの使い方ですが、大きく分けてパターンが3つあります。

const 変数

変数の前にconst 修飾子がつくと、その変数の値を変更できない。

int main(int argc, char const *argv[]){
	const int a = 0;
	a = 10; // エラー
        return 0;
}

const ポインタ

ポインタの前と後とで機能が異なります。
ポインタの前だと値変更を阻止する。
ポインタの後ろだと指す位置の変更を阻止する。

int main(int argc, char const *argv[]){
	int b = 10;

	const int* p0 = &b;
	int* const p1 = &b;
	const int* const p2 = &b;

	p0 = &b;
	p1 = &b; //error
	p2 = &b; // error

	*p0 = 10;//error
	*p1 = 10;
	*p2 = 10;//error

	return 0;
}

const メンバ関数

メンバ関数の後ろにもconstを付け加えることができます。
その場合、メンバ変数の値を変更することができません。

class Foo{
public:
	int number = 10;
	void setNumber(int a) const{
		//エラー
		number = a;
	}
};

まとめ

constを有効に使うと面白いけど、const自体がややこしくないか!?