在C ++中使用const重载是什么?

在C ++中,函数的签名部分取决于它是否为const。 这意味着一个类可以有两个具有相同签名的成员函数,但一个是const而另一个不是。 如果你有这样的类,那么编译器会根据你调用的对象决定调用哪个函数:如果它是类的常量实例,函数的const版本将被调用; 如果该对象不是const,则另一个版本将被调用。

在什么情况下你可能想利用这个function?

当成员函数返回一个指向你的类的数据成员(或成员的成员,或成员的成员等)的指针或引用时,这才真正有意义。 通常返回非const指针或数据成员的引用是皱眉,但有时是合理的,或者只是非常方便(如[]运算符)。 在这种情况下,你提供了一个const和一个非const版本的getter。 这样,关于对象是否可以被修改的决定取决于使用它的函数,该函数可以select声明为const或非const。

它是在那里,所以你可以让编译器强制执行,不pipe你是返回一个const对象还是一个常规对象,并且仍然保持相同的方法签名。 Const正确性有一个深入的解释。

你可能想用它来决定是否把一个const引用返回给一个对象。 STL的容器使用const重载的begin()和end()函数来决定是否返回一个const_iterator或一个正常的迭代器。

看看std :: map :: operator []的行为。 如果您尝试引用无效的键,则const版本会引发错误,但非const版本会执行插入操作。 插入行为比使用std :: map :: insert更方便(而且会进行覆盖),但不能用于const映射。