Поведение оператора ==
От: seejay Россия  
Дата: 07.11.13 15:31
Оценка: -1 :)
Не могу понять, почему для 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==
operator==
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.