Рассмотрим следующий код:
class B
{
int x;
public:
B() : x( 10 ) {}
int get_x() const { return x; }
void set_x( int value ) { x = value; }
};
class A
{
boost::shared_ptr<B> b_;
public:
boost::shared_ptr<B> get_b() const { return b_; } // (1)
};
void f( const A& a)
{
boost::shared_ptr<B> b = a.get_b();
int x = b->get_x();
b->set_x( ++x ); // (2)
}
int main()
{
A a;
f( a );
return 0;
}
В этом коде (2) независимо без каких-либо ошибок или предупреждений компилируется тот факт, что get_b
является константной функцией, а a
является константным объектом.
Мой вопрос: как вы справляетесь с этой ситуацией?Лучшее, что я могу использовать, это изменить (1) на следующее:
boost::shared_ptr<const B> get_b() const { return b_; } // (1)
Но я всегда должен помнить, что я должен добавить const
к типу возвращаемого значения.Это не очень удобно.Есть ли лучший способ?