Re[2]: "class const - метод" - можно ли организовать?
От: _hum_ Беларусь  
Дата: 23.09.15 11:04
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>У вас тут const-ность нарушается из-за наличия в классе не const ссылки на самого себя. Этот пример можно упростить до

VTT>
VTT>class
VTT>t_Something
VTT>{
VTT>  protected: t_Something * m_p_non_const;
VTT>  protected: int           m_x = 0;
    
VTT>  public:
VTT>  t_Something(void)
VTT>  :  m_p_non_const(this)
VTT>  {
VTT>    // do nothing;
VTT>  }
    
VTT>  public: void
VTT>  Set_X(int const x) const
VTT>  {
VTT>    m_p_non_const->m_x = x;
VTT>  }
VTT>};

VTT>int
VTT>main(void)
VTT>{
VTT>  t_Something const something;
VTT>  something.Set_X(42);
VTT>}
VTT>


да, спасибо, так нагляднее.

VTT>Если хочется гарантий, то можно делать immutable объекты.


вы не совсем тогда поняли — я хочу гарантию, что ВЫЗОВ ДАННОГО МЕТОДА не приведет к изменению данных, а не что эти данные ВОВСЕ не должны меняться.
и реализация этого вроде бы не сложная — компилятор должен все this-указатели данного класса, которые попадают в область видимости данного метода, считать const this. тогда бы он смог выдать ошибку в вашем примере, типа:
"m_p_non_const->m_x = x : использование неконстантного указателя на класс t_Something внутри class const метода"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.