在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映射。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top