参考:http://wisdom.sakura.ne.jp/programming/cpp/cpp42.html
構成
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のついているクラス変数から呼び出されることが無い(呼び出せない)。
とりあえずこんな感じで。