7
  1. bool に対して演算子 '&' が定義されているのに、演算子 '&&' が定義されていないのはなぜですか?
  2. これはどのように正確に 1) ブールしますか? &ブール?および2)ブール?とブール作業?

Nullable に関する他の「興味深い」演算子のセマンティクスはありますか? ジェネリック T のオーバーロードされた演算子はありますか?

4

4 に答える 4

14

上の演算子Nullable<T>は「持ち上げられた」演算子です。これが意味することは、T が演算子 T を持っている場合、T? 「持ち上げられた」対応物があります。

&& と || & や | と同じ意味の演算子ではありません。- たとえば、オーバーロードすることはできません - ECMA 仕様 14.2.2 オペレーターのオーバーロードから:

オーバーロード可能な二項演算子は次のとおりです。 + - * / % & | ^ << >> == != > < >= <= 上記の演算子のみオーバーロードできます。特に、メンバー アクセス、メソッド呼び出し、または =、&&、||、??、?:、checked、unchecked、new、typeof、as、および is 演算子をオーバーロードすることはできません。

同様に、ECMA 仕様 14.2.7 Lifted オペレーターから、リフトされたオペレーターは次のとおりです。

単項演算子 + ++ - -- ! 〜

二項演算子 + - * / % & | の場合 ^ << >>

等価演算子の場合 == !=

関係演算子の場合 < > <= >=

したがって、基本的に、短絡演算子はリフト演算子として定義されていません。

[編集: クリブシートを追加]

  • Nullable<T>リフトされた演算子: T の演算子に基づいてコンパイラが提供する operator on 。たとえば、 int「+」演算子は次のint?ように定義された に「リフト」されます。

    (int? x, int? y) => (x.HasValue && y.HasValue) ? (x.Value + y.Value) : (int?) null;

  • 演算子のオーバーロード: 特定の型のカスタム演算子実装を提供する行為。たとえばdecimalDateTimeさまざまな演算子のオーバーロードを提供します

  • 短絡: and の通常の動作&&( ||C++ や C# を含む多くの言語) - つまり、2 番目のオペランドが評価されない可能性があります- つまり

    (式 1, 式 2) => 式 1() ? 式 2() : false;

あるいはもっと簡単な例:

bool someFlag = Method1() && Method2();

ifMethod1()が false を返す場合、Method2()実行されません (コンパイラは全体的な答えが false であることを既に認識しているため)。Method2()データベースに保存するため、副作用がある場合、これは重要です...

于 2008-11-19T20:57:05.867 に答える
4

のために定義された短絡演算子(&& ||)はありませんbool?

論理積(包括的OR)演算子のみであり、次のように動作します。

x        y      x & y   x | y   
true    true    true    true
true    false   false   true
true    null    null    true
false   true    false   true
false   false   false   false
false   null    false   null
null    true    null    true
null    false   false   null
null    null    null    null
于 2008-11-19T20:21:47.640 に答える
1

演算子 "&" はビット単位の演算子ですが、"&&" は論理演算子です。論理「AND」演算子は、threestate 値には適用できません。twostate にのみ適用できます。

于 2008-11-19T20:11:21.373 に答える
0

--さらに、||とともに論理&&演算子 演算子をオーバーロードすることはできません。

2)ビット演算子が機能する理由は、単純な1または0である単一ビットで動作するためです。これは、ブール演算子が本質的に真と偽、1と0であるものです。

于 2008-11-19T20:21:36.733 に答える