在C++中,函数的签名部分取决于它是否为常量。这意味着一个类可以有两个具有相同签名的成员函数,只是一个是const而另一个不是。如果您有一个这样的类,那么编译器将根据您调用它的对象来决定调用哪个函数:如果它是类的常量实例,则调用函数的常量版本;如果对象不是常量,将调用其他版本。
在什么情况下,您可能希望利用此功能?
只有当成员函数返回一个指针或对类的数据成员(或成员的成员,或成员的成员的成员,等等)的引用时,这才真正有意义。通常,返回非常量指针或对数据成员的引用是不受欢迎的,但有时这是合理的,或者只是非常方便(例如[]运算符)。在这种情况下,您可以提供getter的常量和非常量版本。这样,是否可以修改对象的决定取决于使用该对象的函数,该函数可以选择将其声明为常量或非常量。
它的存在使得您可以使编译器强制执行您返回的是常量对象还是常规对象,并且仍然保持相同的方法签名。常量正确性有一个深入的解释。