Вызов неконстантного метода на члене из const-метода

Я был удивлен, обнаружив эту "дыру" в "const "ness:

#include <stdio.h>

class A
{
  int r ;
public:
  A():r(0){}

  void nonconst()
  {
    puts( "I am in ur nonconst method" ) ;
    r++;
  }
} ;

class B
{
  A a ;
  A* aPtr ;

public:
  B(){ aPtr = new A() ; }

  void go() const
  {
    //a.nonconst() ;      // illegal
    aPtr->nonconst() ;  //legal
  }
} ;

int main()
{
  B b ;
  b.go() ;
}

Так что в основном из const метода B:: go(), вы можете вызвать non-const функцию-член (метко названную nonconst()), если на объект типа A ссылается указатель.

Почему так? Похоже на проблему (она вроде как была в моем коде, где я ее нашел)

6
задан curiousguy 19 December 2011 в 05:06
поделиться