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)と、強制されない限り発生しない 2 つの変換が強制されます。関連する節は 13.3.1.2 [over.match.oper] パラグラフ 1 です。

式の演算子のオペランドにクラスまたは列挙型の型がない場合、その演算子は組み込み演算子であると見なされ、5 節に従って解釈されます。 ...

于 2013-10-10T23:01:53.453 に答える