3

なぜ私はこれを行うことができます:

stable_sort(it1, it2, binary_function);

しかし、これではありません:

priority_queue<type, vector<type>, binary_function> pq;

最初のケースで関数を使用できるのに、2番目のケースではオブジェクトが必要なのはなぜですか?

4

2 に答える 2

3

priority_queueはテンプレートであり、引数として型を想定しています。ここで、はbinary_function関数オブジェクトです。

于 2010-12-15T13:48:37.317 に答える
1

のリファレンスをチェックすると、提供したものも関数オブジェクトstd::stable_sortであることがわかりますbinary_function... 2番目のケースでは適切な「キャスト」または変換がないことを除いて、2つの間に違いはありません。関数から適切な関数オブジェクトに作成されます。

これは、関数がファンクターを直接、そしてすぐに使用するためであると考えられます*sort。したがって、*sort関数が呼び出されたときに関数アドレスが有効である場合、関数呼び出しの間有効になります。これをデータメンバーとして(本質的に)使用するコンテナーを作成する場合、コンテナーオブジェクトの存続期間中に関数参照が無効になるかどうかを確認することはできません。ゆるい手振りの説明だとは思いますが、私が思いつくのは最高です。おそらくC++では、バイナリ関数への参照は暗黙的にaの構造に変換されるstd::functionため、関数は「コピー」され、有効性の問題は発生しません。

私は今あなたを失っていないことを願っています...

于 2010-12-15T13:48:23.237 に答える