c++ - 我是否总是必须将任何不影响实例状态的方法声明为 const?

标签 c++ class constants

我有一个具有以下方法的类:

int getLength() {
    return length;
}

(这个类叫做String,我定义它是为了练习)。

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

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

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

我的问题:

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

如果我不必总是这样做,那么在什么情况下我必须将方法声明为 const

最佳答案

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

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

关于c++ - 我是否总是必须将任何不影响实例状态的方法声明为 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171356/

相关文章:

python - 如何在 Tkinter 窗口上使用 for 循环创建多个框架?

C++ 运算符 [] 重载 SNAFU

c++ - Winsock -> WinRT Windows.Networking.Sockets -- 映射错误代码

c++ - 如何处理错误警告 "Condition is always true",因为它实际上是由宏控制的

c++ - 通过 IE 控件禁用 IE 脚本调试

c++ - 'this' 与继承的奇怪行为

c++ - 类 - 用户定义的具有动态大小的智能阵列

class - 在 SwiftUI 中将一个 View 的一个 StateObject 类传递给另一 View 的另一个 StateObject 类

c - const 限定符和 Const 指针

c - 关于 const 指针的快速说明