Не используйте тоже.Инициализируйте константную ссылку, которая ссылается на объект:
T x;
const T& xref(x);
x.f(); // calls non-const overload
xref.f(); // calls const overload
Или используйте шаблон функции implicit_cast
, например , предоставленный в Boost :
T x;
x.f(); // calls non-const overload
implicit_cast<const T&>(x).f(); // calls const overload
Учитывая выбор между static_cast
и const_cast
, static_cast
определенно предпочтительнее: const_cast
следует использовать только для отбрасывания константы, потому что это единственный бросок, который может это сделать, и приведениепрочь константа по своей природе опасна.Изменение объекта с помощью указателя или ссылки, полученной путем отбрасывания константности, может привести к неопределенному поведению.