operator + =重载,为什么const?

时间:2010-11-12 13:06:28

标签: c++ class operator-overloading const

  

可能重复:
  What is the meaning of a const at end of a member function?

亲爱的,

我试图重载运算符+ =并且我得到了一些“丢弃限定符”的错误,只是通过在方法的末尾添加“const”,我能够摆脱错误。有人能解释我为什么需要它吗?下面是代码。

class Vector{
    public:
        Vector();
        Vector(int);

        //int getLength();
        int getLength() const;
        const Vector & operator += (const Vector &);

        ~Vector();
    private:
        int m_nLength;
        int * m_pData;
};

/*int Vector::getLength(){
    return (this->m_nLength);
}*/

int Vector::getLength() const{
    return (this->m_nLength);
}

const Vector & Vector::operator += (const Vector & refVector){
    int newLength = this->getLength() + refVector.getLenth();
    ...
    ...
    return (*this);
}

8 个答案:

答案 0 :(得分:2)

+=修改它的左手参数,当你为一个类重载它时,它是*this。因此,您无法进行该参数const。相反,使用

Vector &Vector::operator+=(const Vector &refVector);

话虽如此,因为它的右手参数必须是const(根据定义),你不能在右手参数上调用非const成员函数({{ 1}})。

答案 1 :(得分:2)

您在getLength上呼叫refVector,这是const Vector &。您只能在const引用上调用const方法。

答案 2 :(得分:2)

operator+=方法接收其参数作为引用常量,因此不允许修改它接收的对象的状态。

因此,通过引用到const(或指向const的指针),您可以只:

  • 读取该对象中的可访问字段(不是写入),
  • 仅调用带有const限定符的方法(表示此方法保证不会修改对象的内部状态),
  • 读取或写入声明为mutable的可访问字段(这里很少使用且不相关)。

希望有所帮助。

答案 3 :(得分:1)

operator+=refVector采用const引用;你只能在const引用上调用const方法,所以getLength()必须是const。

答案 4 :(得分:0)

您这样称呼refVector.getLength()refVector被宣布为const Vector & refVector,因此必须声明getLength可以调用const

答案 5 :(得分:0)

operator+=的实施需要const Vector&,您可以将方法称为getLength()

但是,如果对象(或对其的引用)为getLength(),则无法在const对象上调用const

这就是为什么你在const声明之后添加添加getLength()的原因,以便可以在const个对象上调用它。

答案 6 :(得分:0)

refVectorconst Vector&,因此它只能从const调用Vector个成员函数。

方法末尾的const表示该方法不会修改this的内部状态,并允许将该方法称为const个对象。

答案 7 :(得分:0)

operator+=中,refVectorconst参数。这意味着该函数保证不会改变它,任何这样做的尝试都不会编译。

在函数声明后添加const关键字可以保证该函数不会改变其接收者。换句话说,int getLength();在理论上可以改变refVector中的refVector.getLength();int getLength() const;保证不会。所以第一个不会编译,但第二个会编译。