MSDNによると、「メンバー関数のパラメーターリストに従う場合、constキーワードは、関数が呼び出されるオブジェクトを変更しないことを指定します。」
誰かがこれを少し明確にすることができますか?関数がオブジェクトのメンバーを変更できないことを意味しますか?
bool AnalogClockPlugin::isInitialized() const
{
return initialized;
}
これは、メソッドがメンバー変数を変更しないことを意味し(mutable
として宣言されたメンバーを除く)、クラスの定数インスタンスで呼び出すことができます。
class A
{
public:
int foo() { return 42; }
int bar() const { return 42; }
};
void test(const A& a)
{
// Will fail
a.foo();
// Will work
a.bar();
}
また、メンバー関数は可変としてマークされていないメンバー変数を変更できませんが、メンバー変数がポインターの場合、メンバー関数はポインター値(つまり、ポインターが指すアドレス)を変更できない場合がありますが、ポインタが指すもの(実際のメモリ領域)を変更できます。
したがって、たとえば:
class C
{
public:
void member() const
{
p = 0; // This is not allowed; you are modifying the member variable
// This is allowed; the member variable is still the same, but what it points to is different (and can be changed)
*p = 0;
}
private:
int *p;
};
コンパイラーは、constメンバー関数が* thisを変更したり、このオブジェクトの非constメンバー関数を呼び出したりすることを許可しません。
@delrothが回答したように、これは、メンバー関数が、可変として宣言されたものを除いて、memeber変数を変更しないことを意味します。 C++でのconstの正当性についての良いFAQ)を見ることができます ここ