a + b和运算符+(a,b)之间的差异

时间:2013-10-10 22:53:32

标签: c++ operator-overloading language-lawyer

考虑以下计划:

#include<functional>

typedef std::function< int( int ) > F;

F operator+( F, F )
{
    return F();
}

int f( int x ) { return x; }

int main()
{
    operator+(f,f); // ok
    f+f; // error: invalid operands to binary expression
}

为什么最后一行f+f;无法编译?为什么它与operator+(f,f);不一样?可以参考该标准。

1 个答案:

答案 0 :(得分:2)

f的类型是内置类型。对内置类型对象的操作从不考虑用户定义的运算符。调用operator+(f, f)明确强制进行两次转换,除非被强制转换。相关条款是13.3.1.2 [over.match.oper]第1段:

  

如果表达式中的运算符的操作数没有类型或枚举类型,则假定运算符是内置运算符,并根据第5章进行解释。