問題タブ [prefix-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - (オーバーロード時に)operator ++のプレフィックス形式とポストフィックス形式を区別する方法は?(C ++)
operator++
イテレータクラスのをオーバーロードしたため
しかし、私がやろうとすると
++
プレフィックス形式を使用して、postifxがないという警告が表示されます。どうすればprefix/postifxフォームを具体的にオーバーロードできますか?
javascript - JavaScript でインクリメント ("++") およびデクリメント ("--") 演算子を避けるのはなぜですか?
ツールのヒントのjslint
1 つは次のとおりです。
++
--
(++
インクリメント) および(--
デクリメント) 演算子は、過度のトリッキーさを助長することにより、悪いコードに寄与することが知られています。それらは、ウイルスやその他のセキュリティの脅威を可能にするという点で、欠陥のあるアーキテクチャに次ぐものです。これらの演算子の使用を禁止する plusplus オプションがあります。
次のような PHP 構造体$foo[$bar++]
がオフバイワン エラーを引き起こしやすいことはわかっていますが、ループを制御するための次の方法よりも優れた方法を見つけることができませんでした。
また
" " と " "の構文がない、または異なる方法で処理するjslint
類似の言語がいくつかあるため、それらを強調表示しているのでしょうか。++
--
++
--
c# - 1 つのステートメントでのインデックス、代入、インクリメントの動作は、C++ と C# で異なります。なんで?
このコードの例がc++とC#で異なる動作をするのはなぜですか。
【C++の例】
その結果はarr[1] = 1になります。
【C#の例】
その結果はarr[0] = 1になります。
これはとても奇妙だと思います。確かに、両方の言語がそれを異なる方法で実装するには、何らかの根拠があるに違いありません。C++/CLIは何を出力するのだろうか?
c++ - C++でのプレフィックスとポストフィックスの戻り値
C ++でプレフィックスが参照を返すのに、ポストフィックスが値を返すのはなぜですか?
haskell - Haskellの単項演算子の接頭辞形式
GHCiの場合:
- プレリュード>(+3)2
5- プレリュード>(* 3)2
6- プレリュード>(/ 3)2
0.6666666666666666- プレリュード>( -3)2 文字通りのit'から生じる
(Num(t-> t1))のインスタンスはありません:it =(-3)23' at <interactive>:1:2
Possible fix: add an instance declaration for (Num (t -> t1))
In the expression: 3
In the expression: (- 3) 2
In the definition of
最後のものを修正して-1を返すようにするにはどうすればよいですか?
c++ - 後置 operator++ が前置 operator++ よりも優先されるのはなぜですか?
このように定義すると、どちら++x++
も実行できません++x--
。一方、(++x)++
とはどちら(++x)--
も便利な式です。は 2(++x)++
ずつインクリメントx
し、「中間」の値を返します。 while(++x)--
は と本質的に同等ですが、x+1
を呼び出す必要が完全に回避されますoperator+
。これは場合によっては非常に便利です。
では、優先順位がではなくに++x++
自動的に展開されるように定義されていないのはなぜですか? 後者には私が理解できない隠された意味がありますか、それとも単一のレベルを構成するすべてのプレフィックス演算子を含む単純なリストの優先順位を維持するためですか?(++x)++
++(x++)
編集OK、明示的には言いませんでしたが、もちろん、x
ユーザー定義型になるつもりでした。組み込み型の場合、(x+=2)-1
はもちろん よりも優れており、(++x)++
よりもはるかに優れています。私が念頭に置いている状況は、かなり複雑なタイプの半連想コンテナーへのイテレーターであり、オペレーターと(ランダムアクセス用に設計されている) は、一般的な要求に対して効率的に機能するためにキャッシュを再構築する必要があり、したがって命令です。よりも遅い大きさです。もちろん、引数が非常に小さい整数であるかどうかを常に最初に確認するように変更できます。その場合は、単に呼び出しますx+1
(++x)--
+=
+
++
operator++
ランダムアクセス手順を実行する代わりに、繰り返し。operator+=
ここでは問題なく機能するはずですが、提示する数値がどれほど小さいかに関係なく、ある時点で常にランダムアクセスの方法を使用したい状況が発生する可能性があると想像できます.
だから...私にとって、私は答えを次のように結論付けます:
すべての後置演算子が前置演算子の前に来る、単純で覚えやすい優先順位リストを持つ利点は、前置演算子と後置演算子/を構成するために常に括弧を使用しなければならないという小さな欠点を許容するのに十分です。めったに使用されません。
++
--
より単純な「C はこのように行う」というのは、本当の理由のように思われますが、私には満足のいくものではありません。なぜなら、 C ではまったく++x++
許可されていなかったので、この構成そのものを再定義することができたからです。既存のコード。
とにかく、(++x)--
かっこはそれほど痛くないので、引き続き使用します。
c++ - コンパイラがプリインクリメント/デクリメントとポストインクリメント/デクリメントを解釈する方法
ポスト インクリメント/デクリメントとプリ インクリメント/デクリメントの違いについて誰かが尋ねると、通常、プレフィックス バージョンでは変数に 1 を追加して変数の新しい値を返すのに対し、ポストフィックス バージョンでは変数に 1 を追加してから返すという回答が返ってきます。古い値を返します。
いじり回しているうちに、これらの行はすべて合法であることがわかりました。
ただし、次の行はどれも有効ではありません。
接頭辞のバージョンが参照によって返されると仮定すると、これはすべて理にかなっています (接尾辞は接頭辞よりも優先されるため、最後の例でも)。
プレフィックス バージョンが参照を返し、ポストフィックス バージョンが値を返すという仮定/実現は正しいですか? pre/post inc/decrement 演算子について、私が知らない他の微妙な動作の違いはありますか?
c - 前置演算子と後置演算子の違いは何ですか?
次のコードは値 9 を出力します。なぜですか? ここでreturn(i++)
は値11が返され、値--i
自体が10であるため、これがどのように機能するか説明できますか?
c# - Postfix ++/-- が C# の主要な演算子として分類されるのはなぜですか?
現在、私は C++ プログラマーのクラスに C# 言語の基礎を教えています。トピック演算子について説明したとき、私は主、単項などの演算子の C# 標準カテゴリを使用しました。
出席者の 1 人は戸惑いました。C# 標準では、「接頭辞 ++/--」ではなく、「接尾辞 ++/--」が主要な演算子のカテゴリに入れられたためです。この混乱の背後にある彼女の理論的根拠は、演算子「接頭辞 ++/--」に関して C++ 演算子「接尾辞 ++/--」を実装したいというものでした。言い換えれば、彼女は演算子「接頭辞 ++/--」を主要な演算子として数えたいと考えています。- 彼女の主張は理解できるが、その背後にある論理的根拠を彼女に与えることはできない. OK 演算子「接尾辞 ++/--」は「接頭辞 ++/--」よりも優先順位が高いですが、これがその背後にある唯一の根拠ですか?
仕様では、セクション「14.2.1 演算子の優先順位と結合性」で言及されています。
だから私の非常に中立的な質問: Postfix ++/-- が C# の主要な演算子として分類されるのはなぜですか? そこにはもっと深い真実がありますか?
c++ - 接尾辞と接頭辞の演算子のオーバーロード
次のコードを検討してください
ここでは、2つのバージョンの接尾辞と接頭辞の演算子が実装されています。違いは別のいわゆるダミー引数を導入することによって生じることを読みましたが、これらの宣言が表示されるかどうか疑問があります
それらは&マークで異なるので、なぜダミー引数が必要なのですか?また、どちらの場合も、たとえば++演算子は引数の前に記述され、それらが同じであることを意味しませんか?