当前位置: 首页 > 知识库问答 >
问题:

C++中常量重载有什么用?

吴高洁
2023-03-14

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

在什么情况下,您可能希望利用此功能?

共有2个答案

澹台景辉
2023-03-14

它的存在使得您可以使编译器强制执行您返回的是常量对象还是常规对象,并且仍然保持相同的方法签名。常量正确性有一个深入的解释。

陶英纵
2023-03-14

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

 类似资料:
  • 以下代码返回此错误: 主要的cpp | 80 |错误:将“const matrix”作为“T”的“this”参数传递 有什么想法为什么以及如何修复它吗? http://ideone.com/5OigTP

  • 本文向大家介绍什么是C#中的方法重载?,包括了什么是C#中的方法重载?的使用技巧和注意事项,需要的朋友参考一下 具有相同名称但参数不同的两个或两个以上方法在C#中称为方法重载。 可以通过更改参数的数量和参数的数据类型来执行C#中的方法重载。 假设您有一个输出数字乘法的函数,那么我们的重载方法将具有相同的名称,但参数数量不同- 以下是显示如何实现方法重载的示例- 示例 输出结果

  • 但是,迭代适用于char类型的向量 我看到的答案很少,但我想在没有操作符重载的情况下做到这一点,什么是正确的或更多的C++-NIC方式?

  • 我有一个类,它将引脚的“列表”作为构造函数中的参数。现在,这个“列表”只是一个const数组(

  • 在C++中引用变量的简单定义是什么?

  • 问题内容: 在PHP中,函数重载和函数覆盖是什么意思。两者之间有什么区别?无法弄清楚它们之间有什么区别。 问题答案: 重载 定义的函数具有相似的签名,但具有不同的参数。 覆盖 仅与派生类相关,派生类中的父类已定义了一个方法,而派生类希望 覆盖 该方法。 在PHP中,您只能使用magic方法重载方法。 覆盖 的示例: