我想知道是否可以从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;
从两个函数中调用一个函数和从另一个函数调用函数同样容易.