考虑以下计划:
#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);
不一样?可以参考该标准。
答案 0 :(得分:2)
f
的类型是内置类型。对内置类型对象的操作从不考虑用户定义的运算符。调用operator+(f, f)
明确强制进行两次转换,除非被强制转换。相关条款是13.3.1.2 [over.match.oper]第1段:
如果表达式中的运算符的操作数没有类型或枚举类型,则假定运算符是内置运算符,并根据第5章进行解释。