考虑以下代码:
struct A {
A& add( int i ) { return *this; }
};
A& operator+=( A& a, int i ) { return a; }
void f() {
A a1 = A().add( 1 ); // expr 1
A a2 = A() += 1; // expr 2
}
VC 接受表达式 1 和 2。表达式 2 被 GCC 拒绝,并显示“没有可行的重载 '+='”。但是,对于引用常量对象的运算符,可以接受这样的表达式:
const A& operator+=( const A& a, int i ) { return a; }
为什么GCC在不在方法调用上下文中时强制这个临时在操作符上下文中保持不变,这是正确的行为吗?