2008-10-30 103 views
51

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

在什么情况下您想要利用此功能?

回答

24

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

23

它在那里,所以你可以让编译器强制执行是否返回一个常量对象或常规对象,并仍然保持相同的方法签名。 Const Correctness有深入的解释。

4

您可能想要使用它来决定是否将const引用返回给对象。 STL的容器使用const overloaded begin()和end()函数来决定是返回一个const_iterator还是一个正常的迭代器。

4

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

相关问题