0

考虑以下程序:

#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);?参考该标准将不胜感激。

4

1 回答 1

2

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

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

于 2013-10-10T23:01:53.453 回答