Есть ли какие-либо преимущества, связанные друг с другом:
class Foo
{
public:
const int& get() const
{
// stuff here
return myInt;
}
int& get()
{
return const_cast<int&>(static_cast<const Foo*>(this)->get());
}
};
или
class Foo
{
public:
int& get()
{
// stuff here
return myInt;
}
const int& get() const
{
return const_cast<Foo*>(this)->get();
}
};
Я использовал только первый, но я только что увидел, что второй использовал его, поэтому мне интересно.
Комментарий // stuff here
может быть нетривиальной проверкой, например, для получения индекса таблицы для возврата ссылки на элемент таблицы (например: myInt = myTable[myComputedIndex];
), поэтому я не могу просто сделать ее общедоступной. Таким образом, таблица и любой член не являются константами.