Я думаю, что речь идет о чем-то вроде этого:
class A;
class B {
public:
A * m_a;
B(A * a) : m_a(a) {}
};
Class A {
public:
int m_num;
A(int num=0) : m_num(num) {}
void DoSomethingConst(B * someB) const;
};
void SomeOtherFunction()
{
A myA;
B myB(&myA);
//do something with myA.m_num (1)
myA.DoSomethingConst(&myB);
//do something else with myA.m_num (2)
}
Внутри SomeOtherFunction
компилятор не может сохранить значение myA.m_num
в регистре во время (1) и использовать его сноваво время (2).Даже если DoSomethingConst
равно const
и поэтому не должно изменять значение myA.m_num
, значение все равно можно изменить, поскольку внутри myB
имеется неконстантный указатель на myA
, поэтому myA.m_num
можетвсе еще меняется в течение myA.DoSomethingConst
.В этом случае нетрудно доказать, что существует неконстантная ссылка на myA
, в общем случае это не так.