如何显式调用成员函数的const版本?

时间:2016-09-20 15:45:16

标签: c++ overloading

我在单个类中有一个重载的成员函数。两个返回类型和const修饰符之间的区别:

class A
{
public:
    int mass() const {return m_mass;}
protected:
    int& mass() {return m_mass;}
private:
    int m_mass;
};

但默认情况下,具有类A的非const实例将导致调用非const版本的重载函数:

int main() 
{
    A a;
    return (const int)a.mass();
}
  

错误:int& A::mass()在此上下文中受到保护

在这种情况下如何明确调用const版本?

2 个答案:

答案 0 :(得分:4)

您只需使用名为const的引用,或者更好的是,使用const_cast获取未命名的const引用,然后调用。

int main() 
{
    A a;

    //1
    const A& a_const = a;
    a_const.mass();                

    //2
    const_cast<const A&>(a).mass(); 

    //3
    //in C++17
    //std::as_const(a).mass();          //3
}

使用C ++ 17及更高版本,您可以使用std::as_const

答案 1 :(得分:4)

C ++ 17将引入std::as_const,这是一个非常简单的实用工具,您可以在此之前实现:

A a;
std::as_const(a).mass();