【发布时间】:2013-05-14 13:42:30
【问题描述】:
如果我有一个用户定义的operator+(),如:
class A
{
public:
A operator+(A)
{
return A();
}
};
然后以下工作按预期工作:
A a = A() + A();
但是 g++-4.7 给出了以下错误消息:
A a = (A()) + A();
特别是错误消息是error: no match for ‘operator+’ in ‘+A()’。
看起来(A()) 在表达式中被忽略了。
我的问题是:A a = (A()) + A(); 是否应该编译,如果没有,为什么不编译?
注意:当我执行 #define X (Identity()) 然后尝试执行 X + X 时,这发生在我身上。
【问题讨论】:
-
有趣。如果您不知道,它会被视为一元加号运算符,例如 +5。
-
@chris 既然提到了,如果将示例更改为除法运算符,则不会发生错误,但对于加法、减法和乘法运算符会发生错误。在这种情况下,听起来它正在解析一元运算符而不是二元运算符。
标签: c++ operator-overloading most-vexing-parse