105

これは私が今まで見た唯一の場所でandありornotC++ の実際の演算子としてリストされています。NetBeans でテスト プログラムを作成したとき、構文エラーがあるかのように赤い下線が引かれ、Web サイトが間違っていると判断しましたが、正しくコンパイルおよび実行された NetBeans は間違っています。

!優遇されていることはわかりますが、 &&notの読みやすさは、文法上の兄弟よりも優れているようです。なぜこれらのバージョンの論理演算子が存在し、誰も使用していないように見えるのはなぜですか? これは本当に有効な C++ ですか、それとも言語に含まれていた C との何らかの互換性ですか?andor

4

5 に答える 5

125

それらはヘッダーの C に由来し<iso646.h>ます。当時、&&(たとえば) に必要な記号を入力できないキーボードがあったため、(この例では) と定義することで、入力#defineを支援する 's がヘッダーに含まれていました。もちろん、時間が経つにつれて、これはあまり使用されなくなりました。and&&

C++ では、代替トークンとして知られるものになりました。準拠コンパイラでこれらのトークンを使用するために何かを含める必要はありませ(そのため、C ヘッダーの C++ 化されたバージョンである<ciso646>は空白です)。代替トークンは、スペル以外は通常のトークンと同じです。したがって、 during parsingandは とまったく同じで、&&同じことを別の方法で綴っているだけです。

それらの使用に関しては、めったに使用されないため、それらを使用すると、役立つというよりも驚くべき混乱を招くことがよくあります。普通だったらもっと読みやすいと思いますが、人は慣れすぎて&&||他のものは気が散ってしまいます。

編集:ただし、これを投稿してから、使用量がわずかに増加しました。私はまだそれらを避けています。

于 2010-03-04T02:11:56.780 に答える
23

それらは使いやすさ (キーボード/ディスプレイ フレーバーでの文字サポート) と一般的な読みやすさのために存在しますが、最近ではより顕著になっている別の理由があります。herehere、または here の主な答えでさえ、答えはほとんどありません私たちの多くがシンボルバージョンよりも単語バージョンを好む主な理由 (および他の言語がそれらを使用する主な理由) を詳しく説明します: バグです。単語バージョン間の違いは非常に目立ちます。シンボルのバージョン間の違いはそれほど大きくなく、比較的大きな範囲でバグを引き起こします: "x|y" は "x||y" ではありませんが、より大きな式に埋め込まれている場合、多くの人は違いを見逃す。これは、代入演算子と等値演算子の一般的な偶発的な混合に似ています。このため、私は単語バージョンを支持して、シンボル バージョンから離れました (簡単ではありませんでした)。バグを誘惑するよりも古いものが好きなので、誰かにダブルテイクしてもらいたい.

于 2013-12-17T18:54:27.200 に答える
10

C++ では、これらは実際のキーワードです。C では、これらは で定義されたマクロです<iso646.h>http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.htmlを参照してください。

于 2010-03-04T02:12:04.700 に答える