this

ほら、コレだよコレ


メンバ関数では、this という特別な値が使える。

こいつはメンバ関数を呼び出すのに使ったオブジェクトのポインタだ。

struct Hoge {
  void foo() {
    this;
  }
};
Hoge hoge;
hoge.foo(); // この場合の this は &hoge と同じ

Hoge{}.foo(); // この場合の this が指す実体は、式が終わるとなくなる

他のメンバへのアクセスは this を介しているけれど、省略できちゃう。

class Position {
  int _x, _y;
public:
   int x() const {
     return this->_x; // 本当はこうする
   }
   int y() const {
     return _y; // this-> は省略できるってだけ
   }
};

this がどこから来ているのかイメージしにくかったら、こういうプログラムなんだと思ってみてね。

struct Hoge {};
void foo(Hoge *this) { /* ... */ }

Hoge hoge;
foo(&hoge);