プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【C++】 メンバ関数の後ろのconst

参考:http://wisdom.sakura.ne.jp/programming/cpp/cpp42.html

構成


No.1 試してみたコード
No.2 内容







    No.1 試してみたコード



#include 


class A
{
private:
	int testA;
	const int testB;
	mutable int testC;

public:
	A() :testA(0), testB(1), testC(2){}
	~A() {}


	int FuncA() const 
	{
		// testA = 1;
		testC = 1;
		return testB + 1;
	}
	int FuncB()
	{
		testA = 2;
		testC = 2;
		return testB + 2;
	}
	const int FuncC() const
	{
		// testA = 3;
		testC = 3;
		return testB + 3;
	}
	const int FuncD()
	{
		testA = 4;
		testC = 4;
		return testB + 4;
	}

	int FuncAA() const
	{
		FuncA();
		// FuncB();
		FuncC();
		// FuncD();
		return testB + 5;
	}
	const int FuncBB()
	{
		FuncA();
		FuncB();
		FuncC();
		FuncD();
		return testB + 6;
	}
};


int main()
{
	const A a = A();
	a.FuncA();
	// a.FuncB();
	a.FuncC();
	// a.FuncD();
	a.FuncAA();
	// a.FuncBB();
	

	A b = A();
	b.FuncA();
	b.FuncB();
	b.FuncC();
	b.FuncD();
	b.FuncAA();
	b.FuncBB();

	return 0;
}






    No.2 内容


 試してみたコードを見れば一目瞭然ですが、一応言葉でまとめてみようと思います。
ちなみにコメントアウトしている部分は、外してしまうとコンパイルエラーになる部分です。

 まず、メンバ関数の後ろと前のどちらにconstを置こうが、型に対して影響は何も無さそうです。

 それで、メンバ関数の後ろにconstを置く場合、制約が多くあるみたいです。
1つ目は、constのついていない変数の中身を変更することが出来ない。
2つ目は、mutableの付いている変数の中身は変更できる。

 逆に、メンバ関数の後ろにconstを置かない場合、以下の制約が出るみたいです。
1つ目は、constのついているクラス変数から呼び出されることが無い(呼び出せない)。

 とりあえずこんな感じで。