In Page 562 The C++ Programming Language 4e, the author shows two functions:
char& operator[](int n) {}
char operator[](int n) const {}
If I write
char c = someObj[2];
Since the resolution didn't take care of the return type, and then, which function will be chosen?
I made several tries and it just to call char& operator[](int n) {}
, and I think the const function defined here just to give it a chance to be able to be called in some context that require a const. But I not quite sure that.
this is my testing code:
#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];
}
The return type is not considered in overload resolution. Your overload will be selected based on the const-qualification of the object the operator is called on:
int main() {
A a;
a[2];
const char &c = a[4];
const A b;
b[2];
const char &d = b[4];
}
The output of this is:
plain function
plain function
const function
const function
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With