重複の可能性:
C ++メソッド宣言の最後にある「const」の意味は?
以下の関数宣言では、
const char* c_str ( ) const;
2番目の定数は何をしますか?
これは、メソッドが「constメソッド」であることを意味します。このようなメソッドを呼び出すと、インスタンスのデータ(mutable
データメンバーを除く)を変更できず、他のconstメソッドのみを呼び出すことができます。
constメソッドはconstまたはnon-constインスタンスで呼び出すことができますが、non-constメソッドはnon-constインスタンスでのみ呼び出すことができます。
struct Foo {
void bar() const {}
void boo() {}
};
Foo f0;
f0.bar(); // OK
fo.boo(); // OK
const Foo f1;
f1.bar(); // OK
f1.boo(); // Error!
これconst
は、メンバー関数にのみタグを付けることができます。オブジェクトのデータメンバーを変更しないことが保証されます。
たとえば、次のような理由でコンパイル時エラーが発生します。
struct MyClass
{
int data;
int getAndIncrement() const;
};
int MyClass::getAndIncrement() const
{
return data++; //data cannot be modified
}
これは、そのメソッドに影響を与える修飾子です(メソッドにのみ適用可能です)。これは、オブジェクトの状態にアクセスするだけで、変更しないことを意味します(つまり、属性は変更されません)。
もう1つの微妙な変更は、このメソッドが他のメソッドしか呼び出せconst
ないことです(オブジェクトを変更する可能性のあるメソッドを呼び出させても意味がありません)。場合によっては、これは、いくつかのメソッドの2つのバージョンが必要であることを意味します。1つでconst
はないconst
ものです。