S
subramanian100in
Consider the following program:
#include <iostream>
#include <cstdlib>
using namespace std;
class Test
{
public:
Test(int arg = 10);
int val;
};
Test::Test(int arg) : val(arg)
{
cout << "one arg ctor called" << endl;
}
Test operator+=(Test lhs, Test rhs)
{
cout << "from operator+=" << endl;
return Test(lhs.val + rhs.val);
}
int main()
{
Test obj;
5 += obj;
return EXIT_SUCCESS;
}
This program compiles fine with both g++ and VC++ 2005 Express Edition
and both produced the following output:
one arg ctor called
one arg ctor called
from operator+=
one arg ctor called
My question:
Why doesn't the standard make the '+=', '-=', etc. be defined only as
non-static member functions similar to the way that an 'operator=,
operator[], operator(), and operator->' must be non-static member
function, so that it will disallow 5 += obj; (It should disallow
because the constant 5 appears on the left hand side)
Is there any advantage for the operators +=, -=, *=, etc be allowed as
non-member
functions ?
Kindly clarify
Thanks
V.Subramanian
#include <iostream>
#include <cstdlib>
using namespace std;
class Test
{
public:
Test(int arg = 10);
int val;
};
Test::Test(int arg) : val(arg)
{
cout << "one arg ctor called" << endl;
}
Test operator+=(Test lhs, Test rhs)
{
cout << "from operator+=" << endl;
return Test(lhs.val + rhs.val);
}
int main()
{
Test obj;
5 += obj;
return EXIT_SUCCESS;
}
This program compiles fine with both g++ and VC++ 2005 Express Edition
and both produced the following output:
one arg ctor called
one arg ctor called
from operator+=
one arg ctor called
My question:
Why doesn't the standard make the '+=', '-=', etc. be defined only as
non-static member functions similar to the way that an 'operator=,
operator[], operator(), and operator->' must be non-static member
function, so that it will disallow 5 += obj; (It should disallow
because the constant 5 appears on the left hand side)
Is there any advantage for the operators +=, -=, *=, etc be allowed as
non-member
functions ?
Kindly clarify
Thanks
V.Subramanian