Privateな変数について

書いててふと気になったので試してみた。こんな感じのソース

#include <iostream>

class A{
  private:
    int i;
  public:
    A(i) : i(i);
    bool look(A& a){
      return a.i > 0;
    }
};

int main(){
  using namespace std;
  A a1(1), a2(-1);
  if(a1.look(a2))
    cout << "positive" << endl;
  else
    cout << "negative" << endl;
}
/* OUTPUT : negative*/

何が気になったのかは、「引数にとったthis以外の別のオブジェクトでもprivateの変数にアクセスできるのか」ということ。結果はできちゃうんだな。

アクセス修飾子はコンパイルの時点でしか見られないので、ソース上Class Aの内部であれば、Aのprivateメンバにはどのオブジェクトだろうが自由にアクセスできるらしい。

なんか気持ちが悪いけどそんなもんなのだろう。