是否可以在成员例程中使用const_cast来避免重复的代码

vla*_*sch 4 c++ oop const-cast

在这种情况下使用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;
};
Run Code Online (Sandbox Code Playgroud)

目的是获取例程可能要复杂得多,应避免代码重复.

Naw*_*waz 8

不,我不建议这样做.我建议你const_cast反向使用:

int& get() { return const_cast<int&>(const_cast<A const &>(*this).get()); };

const int& get() const {  return m_someData; };
Run Code Online (Sandbox Code Playgroud)

也就是说,你应该从非const重载调用const成员函数,而不是相反.这样,你确保即使是非const版本也不会改变对象的状态,并且两个函数中的代码确实相同(因为你最终调用了const版本) - 并且肯定会有你想要的代码重复避免.

如果你反过来这样做,编译器不会告诉你是否修改了函数的非const版本中的对象,并且从const函数调用这样的函数是不正确的.

  • @Angew我认为他是对的.如果我把它转换为nonconst并调用非const get()然后编译器不会强制在get中更改此对象 (2认同)