为什么最后放一个“const”?

时间:2011-03-18 03:26:55

标签: c++ operator-overloading const

  

可能重复:
  c++ const use in class methods
  Meaning of “const” last in a C++ method declaration?

int operator==(const AAA &rhs) const;

这是一个运算符重载声明。为什么要将const放在最后?感谢

5 个答案:

答案 0 :(得分:7)

const关键字表示该方法不会更改对象。由于operator==用于比较,因此无需更改任何内容。因此,它是const。对于像operator=这样修改对象的方法,必须省略它。

它让编译器仔细检查你的工作,以确保你没有做任何你不应该做的事情。有关详细信息,请查看http://www.parashift.com/c++-faq-lite/const-correctness.html

答案 1 :(得分:3)

创建方法const将让类的一个常量对象调用它。因为此方法无法更改任何对象的成员(编译器错误)。

值得一提的是const是方法签名的一部分,因此在同一个类中,您可能有两个相同原型的方法,但一个是const而另一个不是。在这种情况下,如果从变量对象调用重载方法,则调用非const方法,如果从常量对象调用它,则调用const方法。

但是,如果你只有一个const方法(它没有非常量的重载),那么它就是从变量和常量对象中调用的。

例如:

#include <iostream>

using std::cout;

class Foo
{
public:
    bool Happy;
    Foo(): Happy(false)
    {
        // nothing
    }
    void Method() const
    {
        // nothing
    }
    void Method()
    {
        Happy = true;
    }
};

int main()
{
    Foo A;
    const Foo B;
    A.Method();
    cout << A.Happy << '\n';
    B.Method();
    cout << B.Happy << '\n';
    return 0;
}

将输出:

1
0
Press any key to continue . . .

答案 2 :(得分:1)

任何c ++声明结尾处的“const”告诉编译器它不会改变它所属的东西。

答案 3 :(得分:1)

这标志着方法本身是常量,这意味着只要有对相关对象的 const 引用,编译器就允许您使用该方法。如果你有一个const引用,否则你只能调用也被声明为const的方法。

答案 4 :(得分:1)

方法声明末尾的'const'标记该方法可以安全地调用常量对象。