【问题标题】:member functions with same name C++ [closed]同名C++的成员函数[关闭]
【发布时间】:2014-07-09 20:20:19
【问题描述】:

我发现了一个例子,在一个类定义中,定义了 2 个成员函数,但具有相同的名称和相同数量的参数:

const MyClass& operator [] (int index) const;
MyClass& operator [] (int index);

我的问题是编译器如何知道它需要使用哪个运算符定义?

【问题讨论】:

  • operator overloading。它解释了这个精确的场景。
  • 它们在const 限定符上有所不同...
  • 下次你可以问,因为我没有看到你的问题:)
  • 这不是问题。你想问什么? const 限定符在函数和类型签名中很重要。

标签: c++ function class


【解决方案1】:

当两个方法仅在 const 的声明中不同时,如果从同样声明为 const 的指针或引用调用 const 版本,则将选择它。否则你会得到非常量版本。

这在vector 的实现中最常见。如果你有一个 const 向量,你不希望能够改变任何元素,所以返回一个元素的 const 引用。

【讨论】:

    【解决方案2】:

    它们是不同的方法,主要是由于const 后缀。

    返回值(单独)不能用于解析重载的方法或运算符。

    编辑 1:
    你的理解是不正确的。

    第一个函数返回一个对象的引用,它不能被修改。它不返回副本。该方法不允许修改类成员。

    第二个函数返回一个对象的引用,这个对象可以被修改。该方法允许修改类成员。

    【讨论】:

      【解决方案3】:

      如果您尝试在常量函数中使用运算符,则将调用常量运算符,否则将调用非常量运算符。这是一个经常让人误会的微妙之处,就好像您只定义了非常量运算符但尝试在常量函数中使用它会导致错误一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-22
        • 2015-01-13
        相关资源
        最近更新 更多