int operator (int){
//relevant code
}
I dont seem to understand the workings of the code for overloading post increment operator given above
I know that the int as a dummy parameter is given to differentiate between pre-increment and post increment operator overloading.
If a is a object of the class in which these operators are overloaded ,both a and a should have a equivalent representation as a.operator ()(as per my understanding ),how does the int parameter help in resolving it as a post increment operator?
-A c beginner
CodePudding user response:
If a is a object of the class in which these operators are overloaded ,both a and a should have a equivalent representation as a.operator ()(as per my understanding ),how does the int parameter help in resolving it as a post increment operator?
The post increment operator can be called with a dummy int argument but normally this isn't what you would do. In the following, typically you would define void foo::operator (int) so that you can make a call like (1) but (2) is legal.
#include<iostream>
struct foo {
void operator () {
std::cout << "pre\n";
}
void operator (int) {
std::cout << "post\n";
}
};
int main() {
foo a;
// these yield: pre
a;
a.operator ();
// these yield post:
a ; // (1)
a.operator (int{}); // (2)
}
CodePudding user response:
When the compiler sees a, and a is not a built-in type, then the compiler looks for either a::operator () or operator (a&) and if found then calls it.
When the compiler sees a , and a is not a built-in type, then the compiler looks for either a::operator (int) or operator (a&, int) and if found then calls it.
See Increment/decrement operators on cppreference.com for more details.
