从const成员函数调用非const成员函数

Ste*_*eve 15 c++ const

我想知道是否可以从const成员函数调用非const成员函数.在下面的示例中,First给出了编译器错误.我明白为什么它会出错,我想知道是否有办法解决它.

class Foo
{
   const int& First() const
   {
         return Second();
   }

   int& Second()
   {
        return m_bar;
   }

   int m_bar;
}
Run Code Online (Sandbox Code Playgroud)

我真的不想讨论这样做的智慧,我很好奇它是否可能.

Ada*_*ght 32

return (const_cast<Foo*>(this))->Second();
Run Code Online (Sandbox Code Playgroud)

然后静静地哭泣.


Jam*_*lis 10

可能:

const int& First() const 
{ 
    return const_cast<Foo*>(this)->Second(); 
}

int& Second() { return m_bar; }
Run Code Online (Sandbox Code Playgroud)

我不推荐这个; 它是丑陋和危险的(任何使用const_cast是危险的).

最好将尽可能多的常用功能移动到辅助函数中,然后让const和非const成员函数尽可能少地工作.

对于像这样的简单访问器,return m_bar;从两个函数中调用一个函数和从另一个函数调用函数同样容易.