C ++中的重载分辨率

时间:2015-08-13 14:12:30

标签: c++ overloading

Page 362 C ++编程语言4e 中,作者展示了两个函数:

char& operator[](int n) {}
char operator[](int n) const {}

如果我写

char c = someObj[2];

由于分辨率没有处理返回类型,然后,将选择哪个功能?

我做了几次尝试,只是为了调用char& operator[](int n) {},我认为这里定义的const函数只是为了让它有机会在一些需要const的上下文中被调用。但我不太确定。

这是我的测试代码:

#include <iostream>
using namespace std;

class A {
private:
    char p[10] = "abcdefg";
public:
    char operator[](int n) const {
        cout << "const function" << endl;
        return p[n];
    }
    char& operator[](int n) {
        cout << "plain function" << endl;
        return p[n];
    }

};

int main() {
    A a;
    a[2];
    const char &c = a[4];
}

1 个答案:

答案 0 :(得分:8)

在重载决策中不考虑返回类型。将根据调用运算符的对象的const限定来选择重载:

int main() {
    A a;
    a[2];
    const char &c = a[4];

    const A b;
    b[2];
    const char &d = b[4];
}

这个输出是:

plain function
plain function
const function
const function