【发布时间】:2013-10-10 22:53:31
【问题描述】:
考虑以下程序:
#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);不一样?参考标准将不胜感激。
【问题讨论】:
-
@Cubbi 我不认为这是重复的,它是关于 重载 成员和块范围运算符。
-
这个答案提出了查找规则(
a+b与operator+(a,b)完全不同),所以它会回答你的问题的标题.. 但是是的,在这种情况下,标准中有一条捷径。
标签: c++ operator-overloading language-lawyer