在这种情况下可以使用 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 例程可能要复杂得多,并且应避免代码重复。
在这种情况下可以使用 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 例程可能要复杂得多,并且应避免代码重复。
不,我不建议这样做。我建议您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 函数调用这样的函数是不正确的。