考慮下面的程序:(A,B)
#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);
不一樣?對此標準的參考將不勝感激。
可能的重複http://stackoverflow.com/questions/13869150/rules-for-lookup-of-operators-in-c11? – Cubbi
@Cubbi我不認爲這是重複的,它是關於*重載*成員和塊作用域操作符。 –
那麼這個答案提出了查找規則(對於'a + b'和'operator +(a,b)'來說這是相當不同的),所以它會回答你的問題的標題。但是,在這種情況下,標準中有一個捷徑。 – Cubbi