Не могу понять, почему для int* порядок вычисления аргументов оператора == один, а для структуры другой.
#include <iostream>
struct A{
int *m;
int c;
A(int* p) :m(p), c(0){ }
A& operator++(){ ++c; return *this; }
int* operator&(){ return &m[c]; }
};
int main() {
int m[10] = {0,1,2,3};
int *pi = m;
if (&pi == &++pi)
std::cout << "pint ok";
A p(m);
if (&p == &++p)
std::cout << "pA ok";
return 0;
}
Вывод программы:
pint ok
То есть в первом if-e порядок вычисления такой:
&++pi
&pi
operator==
Во втором, для A такой:
&p
&++p
operator==