-2

新しいメソッドを書く必要があります。次のコードが与えられます。

const Class * func() const;

しかし、クラスと関数の両方が定数として宣言されているとはどういう意味でしょうか?

4

4 に答える 4

3
const Class * func() const;

const Class*戻り型です。この関数は へのポインターを返すと書かれていますconst Class。したがって、この関数を呼び出す人は誰でもポインターを受け取りますが、ポインターが指すオブジェクトを変更することはできません。

宣言のconst最後の は、このメンバー関数が呼び出されているオブジェクトの状態を変更しないことを示しています。つまり、this指しているオブジェクトは変更されません。実際、 のデータ メンバー ( ではないmutable)を変更しようとするfuncと、コンパイラが通知します。

于 2013-05-05T22:11:59.507 に答える
2
const Class * func() const;
^^^^^                ^^^^^
  1                    2
  • 1 つ目constは、戻り値の型が であることを意味しconst Class*ます。

  • 2 つ目は、メソッドfuncがそのクラス メンバーを変更しないことを意味します。

 

段落ごと§9.4/1:

struct X {
   void g() const;
};

メンバー関数が宣言されている場合const、の型thisconst X*

したがって、 のメンバーを変更することはできませんX

于 2013-05-05T22:11:54.863 に答える
2
const Class * ...

これはfunc、 を返すことconst pointerを意味しますClass

Class c;
Class* p = c.func()        // Not allowed.
const Class* p = c.func()  // OK.
p->mem = 2;                // Not allowed. p is a const pointer.

-------------------------------------------------- --------------------------------------------

func() const;
       ^^^^

つまり、クラスの状態に影響を与えません (メンバー変数をfunc変更しません)。this

void Class::func(int& i) const {
   this->mem = i;  // is not allowed here since func() is const (unless 'mem' is mutable)
   i = this->mem;  // This is OK.
}
于 2013-05-05T22:12:10.477 に答える