Re: overloading of ","
On 12 Mar, 11:17, "josh" <xdevel2...@yahoo.com> wrote:
Hi, I coded the following but It does not return what I expect, why?
#include <iostream>
using namespace std;
class Other
{
public:
int i;
Other(int x=1)
{
i = x;
}
Other *operator-> () { return this;}
Other &operator+ (Other t)
{
i += t.i;
return *this;
}
Other &operator,(Other oth)
{
i = oth.i;
return *this;
}
};
int main()
{
Other o0, o1, o2(4), o3(5);
o0->i = 100;
cout << o0.i << "\n" << o0->i << "\n";
// HERE it returns 5 AND not 6 WHY ???????????????????
Other ox = (o1 + o1, o3 = o2 + o1);
// ------------------
cout << ox.i << endl;
return 0;
}
the precedence, associativity and arity of overload operator, as rule,
"should" be the same for the PDO but here for the comma it doesn't
seem so...
if I add to my class an overload of * and than I make i.e.
o1 + o2 * 03 the evaluation order is correct and in fact will be FIRST
o2 * o3 and SECOND
o1 + (the mul result).
So I think that the compiler when meet that expression will do:
o1.operator+(o2.operator*(o3))
but it should do the same with:
(o1.operator+(o1)).operator,(o3 = 02.operator+(o1))
so it should evaluate from left to right as the same PDO rule...
so what's wrong?