当我尝试编译以下(g++ 4.6.3)
class A {};
A& operator*=( A& a, const A& b )
{
return a;
}
A operator*( const A& a, const A& b )
{
return A( a ) *= b;
}
int main( int, char*[] )
{
A a, b;
a = a*b;
return 0;
}
我得到错误
/tmp/test.cxx: In function ‘A operator*(const A&, const A&)’:
/tmp/test.cxx:14:20: error: no match for ‘operator*=’ in ‘(* & a) *= b’
/tmp/test.cxx:14:20: note: candidate is:
/tmp/test.cxx:6:1: note: A& operator*=(A&, const A&)
/tmp/test.cxx:6:1: note: no known conversion for argument 1 from ‘A’ to ‘A&’
这让我很困惑——从一个类到对该类的引用的转换怎么可能不知道呢?
如下更改类 A 的声明没有任何效果:
class A
{
public:
A() {}
A( const A& ) {}
};
同样的错误。
我将非常感谢有关这里发生的事情的提示。