我有一个使用以下方法的课程:
int getLength() {
return length;
}
(该课程名为String
,我将其定义为练习。)
当我尝试编译时,我收到一个关于调用此方法的代码行的错误:
passing 'const String' as 'this' argument of int String::getLength() discards qualifiers.
在这个网站上搜索让我意识到我需要在方法声明中添加const
。它解决了这个问题。
我的问题:
我是否总是必须声明任何不会影响实例状态的方法,如const
?如果我不这样做,我会收到编译时错误?看起来很奇怪。
如果我不必一直这样做,那么当我必须将方法声明为const
时,我的情况是什么?
答案 0 :(得分:4)
编译器错误不是由方法引起的,而是由您调用它的实例的类型引起的。您尝试在const对象(const String
)上调用非const方法或引用const对象(const String&
)。编译器正确地拒绝了这一点。
而且,是的,您应该将所有逻辑const
的方法标记为const
。