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

How to explicitly call const version of the member function?

本文关键字:成员 函数 版本 const 何显式 调用      更新时间:2023-10-16

在单个类中有一个重载的成员函数。两个返回类型和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版本?

您只需使用命名的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

c++ 17将引入std::as_const,这是一个非常简单的实用程序,在此之前您可以自己实现:

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