ホームページ  >  記事  >  バックエンド開発  >  `std::function`、`boost::function`、および `std::tr1::function` が等価比較できないのはなぜですか?

`std::function`、`boost::function`、および `std::tr1::function` が等価比較できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 19:26:02112ブラウズ

Why are `std::function`, `boost::function`, and `std::tr1::function` not Equality Comparable?

std::function は等価比較できない理由

最初の質問:

std::function はなぜ等価比較できないのか (またboost::function と std::tr1::function に適用可能) 同等ではありませんか?

答え:

比較できない理由:

std::function は、幅広い呼び出し可能な型に対応するように設計されています。すべての呼び出し可能な型に等価比較を課すことは、実装者にとって負担になります。さらに、たとえ実装されたとしても、等価性チェックは範囲が狭く、別の方法で構築された同等の関数を考慮していない可能性があります。

「型システムの潜在的な穴」 説明:

削除オーバーロードされた == 演算子と != 演算子はそれらの使用を完全に阻止し、関数を暗黙的に比較しようとするとコンパイル時エラーが発生します。このアプローチにより、意図しない、または問題のある暗黙的な変換の可能性が排除されます。

std::shared_ptr:

との比較 std::function とは異なり、std::shared_ptr は、定義された等価セマンティクス。 2 つのshared_ptr インスタンスは、両方とも空であるか、両方とも空ではなく同じオブジェクトを参照している場合、等しいとみなされます。

以上が`std::function`、`boost::function`、および `std::tr1::function` が等価比較できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。