在这种情况下使用const_cast是否可以,或者有任何警告:
class A{
public:
A() : m_someData(5)
{}
int& get() { return m_someData;};
const int& get() const { const_cast<A*>(this)->get(); };
private:
int m_someData;
};
意图是get例程可能要复杂得多,应该避免代码重复。
答案 0 :(得分:8)
没有。我不建议这样做。我建议你反向使用const_cast
:
int& get() { return const_cast<int&>(const_cast<A const &>(*this).get()); };
const int& get() const { return m_someData; };
也就是说,你应该从非const 重载调用 const 成员函数,而不是相反。这样,你确保即使是非const版本也不会改变对象的状态,并且两个函数中的代码确实相同(因为你最终调用const版本) - 并且< em>肯定是你要避免的代码重复。
如果你反过来这样做,编译器不会告诉你是否修改了函数的非const版本中的对象,并且从const函数调用这样的函数是不正确的。