我是否总是必须声明任何不影响实例状态的方法,如const?

时间:2014-10-02 23:48:03

标签: c++ class const

我有一个使用以下方法的课程:

int getLength() {
    return length;
}

(该课程名为String,我将其定义为练习。)

当我尝试编译时,我收到一个关于调用此方法的代码行的错误:

passing 'const String' as 'this' argument of int String::getLength() discards qualifiers.

在这个网站上搜索让我意识到我需要在方法声明中添加const。它解决了这个问题。

我的问题:

我是否总是必须声明任何不会影响实例状态的方法,如const?如果我不这样做,我会收到编译时错误?看起来很奇怪。

如果我不必一直这样做,那么当我必须将方法声明为const时,我的情况是什么?

1 个答案:

答案 0 :(得分:4)

编译器错误不是由方法引起的,而是由您调用它的实例的类型引起的。您尝试在const对象(const String)上调用非const方法或引用const对象(const String&)。编译器正确地拒绝了这一点。

而且,是的,您应该将所有逻辑const的方法标记为const