[解決済み】==と!=は相互に依存しあっている?
質問
C++で演算子のオーバーロードについて学んでいるのですが、以下のようなことがわかります。
==
と
!=
は、ユーザー定義型のためにカスタマイズできる特殊な関数に過ぎません。しかし、私の懸念は、なぜ
2つの別々の
の定義が必要なのでしょうか?私は、もし
a == b
が真であれば
a != b
は自動的に偽となり、その逆もまた然りで、それ以外の可能性はありません、なぜなら、定義上
a != b
は
!(a == b)
. そして、これが真実でない状況を想像することができなかった。しかし、私の想像力が乏しいのか、それとも私が何かについて無知なのでしょうか。
一方を他方から見て定義できることは知っていますが、私が尋ねているのはそういうことではありません。また、価値で比較するのか、同一性で比較するのかの違いについても尋ねていません。また、2つのオブジェクトが同時に等しく、かつ非等価である可能性があるかどうかについても尋ねていません(これは絶対に選択肢ではありません!これらのことは相互に排他的です)。私が尋ねているのは、このことだ。
2つのオブジェクトが等しいことを質問するのは意味があるが、2つのオブジェクトについて質問するのは意味がない、という状況はあり得るだろうか? ない は意味をなさないのでしょうか?(ユーザーの視点でも、実装者の視点でも)。
もしそのような可能性がないのであれば、一体なぜC++はこの2つの演算子を2つの異なる関数として定義しているのでしょうか?
どうすれば解決するの?
あなたは
ない
を自動的に書き換えるような言語が欲しい。
a != b
として
!(a == b)
いつ
a == b
以外のものを返します。
bool
. そして、そのような動作をさせる理由はいくつかあります。
エクスプレッションビルダーオブジェクトがあり、そこで
a == b
は比較を行わず、また比較を行うことを意図せず、単に
a == b
.
遅延評価を行うことができます。
a == b
は直接比較を行わず、また行うことを意図していませんが、その代わりに何らかの
lazy<bool>
に変換することができます。
bool
暗黙的に、あるいは後で明示的に、実際に比較を実行します。式ビルダーオブジェクトと組み合わせることで、評価前に式を完全に最適化できる可能性があります。
を使用することができます。
optional<T>
テンプレートクラスで、与えられたオプションの変数
t
と
u
を許可したい場合は
t == u
を返します。
optional<bool>
.
思いつかないものがまだまだあるかもしれません。そして、これらの例では、操作
a == b
と
a != b
はどちらも意味を持ちますが、やはり
a != b
は同じものではありません。
!(a == b)
そのため、別の定義が必要です。
関連
-
[解決済み] テスト
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】Enterキーを押して続行する
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない