`std::function` オブジェクトが等しいかどうかを比較できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-30 15:55:03
オリジナル
905 人が閲覧しました

Why Can't I Compare `std::function` Objects for Equality?

std::function の不等価比較の背後にある謎

std::function は任意の呼び出し可能オブジェクトをカプセル化するため、等価比較に独特の課題が生じます。このような比較を実装するには、すべての呼び出し可能な型の等価比較が必要となり、実装者に多大な負担を強いることになります。さらに、機能が等しい場合でも、引数のバインディング順序の違いに基づいて、等しくない比較が生じる可能性があります。したがって、すべてのケースで等価性を保証するという不可能なタスクは、等価性の比較を禁止します。

C 11 ドラフトで言及されている「型システムの潜在的な穴」は、暗黙的な変換に固有のあいまいさを指している可能性があります。等価演算子を削除し、明示的な使用を強制することで、それらの呼び出しから生成される有効なコードが存在しないことが保証されます。

std::function とは異なり、std::shared_ptr は明確に定義された等価セマンティクスを備えています。 2 つのポインターが両方とも空である場合、または両方が同じオブジェクトを参照している場合、正確に等しくなります。この明確に定義された動作により、簡単で意味のある等価比較が可能になります。

以上が`std::function` オブジェクトが等しいかどうかを比較できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート