2

重複の可能性:
C ++メソッド宣言の最後にある「const」の意味は?

以下の関数宣言では、

const char* c_str ( ) const;  

2番目の定数は何をしますか?

4

3 に答える 3

18

これは、メソッドが「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!
于 2012-04-28T23:03:16.477 に答える
1

これconstは、メンバー関数にのみタグを付けることができます。オブジェクトのデータメンバーを変更しないことが保証されます。

たとえば、次のような理由でコンパイル時エラーが発生します。

struct MyClass
{ 
    int data; 
    int getAndIncrement() const;
};

int MyClass::getAndIncrement() const
{
    return data++; //data cannot be modified
}
于 2012-04-28T23:00:30.627 に答える
1

これは、そのメソッドに影響を与える修飾子です(メソッドにのみ適用可能です)。これは、オブジェクトの状態にアクセスするだけで、変更しないことを意味します(つまり、属性は変更されません)。

もう1つの微妙な変更は、このメソッドが他のメソッドしか呼び出せconstないことです(オブジェクトを変更する可能性のあるメソッドを呼び出させても意味がありません)。場合によっては、これは、いくつかのメソッドの2つのバージョンが必要であることを意味します。1つでconstはないconstものです。

于 2012-04-28T23:03:47.017 に答える