在const函数的非const成员上调用non-const函数

时间:2019-02-15 09:59:20

标签: c++ g++ const member-functions

成员是非const的,成员的成员函数是非const的,当在const成员函数上调用该成员时,会产生错误,并抱怨:

error: passing 'const foo' as 'this' argument discards qualifiers [-fpermissive]

代码:

// this class is in library code  i cannot modify it
class CWork {
public:
    const string work(const string& args) { // non const
        ...
        return "work";
    }
};
// this is my code i can modify it 
class CObject {
private:
    CWork m_work; // not const
public:
    const string get_work(const string& args) const { // const member function
        return m_work.work(args);  // error here
    }
};

这是为什么以及如何解决? 编译器为g ++ 5.3.1。

1 个答案:

答案 0 :(得分:1)

const方法内,对象(*this)及其所有成员均为const。想想看,如果不是这种情况,那么对象const就没有任何意义。

因此m_workconst中是get_work,您只能在其上调用const方法。

使work也是一种const方法。没有明显的理由使它不为const,默认情况下,您应使方法为const。仅当需要修改对象时,才将它们设置为非{const

  

它在库中,我无法更改。

在这种情况下,您很不走运。您也只能使get_work为非常量,因为work似乎修改了m_work因此修改了CObject,而您在const方法中无法做到这一点。