在C++中,函数的签名部分取决于它是否为const.这意味着一个类可以有两个具有相同签名的成员函数,除了一个是const而另一个不是.如果你有这样的类,那么编译器将根据你调用它的对象来决定调用哪个函数:如果它是类的const实例,那么将调用函数的const版本; 如果对象不是const,则将调用另一个版本.
您希望在什么情况下利用此功能?
当成员函数返回指针或对类的数据成员(或成员的成员,成员的成员,...等)的引用时,这才有意义.通常返回非常量指针或对数据成员的引用是不受欢迎的,但有时它是合理的,或者只是非常方便(例如[]运算符).在这种情况下,您提供了getter的const和非const版本.这样决定是否可以修改对象取决于使用它的函数,它可以选择声明const或非const.
它就在那里你可以使编译器强制执行是返回const对象还是常规对象,并且仍然保持相同的方法签名.Const Correctness有一个深入的解释.
您可能希望使用它来决定是否将const引用返回给对象.STL的容器使用const重载的begin()和end()函数来决定是返回const_iterator还是正常的迭代器.
看一下std :: map :: operator []的行为。如果您尝试引用无效的密钥,则const版本会引发错误,但非const版本会插入。插入行为比必须使用std :: map :: insert更为方便(而且还会进行覆盖),但不适用于const映射。