問題タブ [operators]
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++ - なぜ ++i は左辺値と見なされますが、i++ はそうではありませんか?
++i が左辺値であり、i++ でないのはなぜですか?
c++ - C++演算子のあいまいさ
私はC++にかなり慣れていないので、許してください。しかし、演算子のあいまいさに関して問題があります。デスクトップでコンパイルされたコードについては、コンパイラ固有だと思います。しかし、私のラップトップではコンパイルできません。何が悪いのかはわかっていると思いますが、それを回避するためのエレガントな方法はわかりません。明らかな間違いがある場合はお知らせください。とにかく、これが私がやろうとしていることです:
私はVector4と呼ばれる独自のベクトルクラスを作成しました。これは次のようになります。
次に、問題を引き起こしているこれらの演算子があります。
Vector4クラスのインスタンスをglVertex3fvに渡すことができるように、変換演算子があります。明らかな理由で添え字を付けています。ただし、Vector4の添え字を含む呼び出しは、コンパイラーにとってあいまいになります。
候補者は次のとおりです。
添え字演算子が既にVector4で定義されているのに、なぜ最初にVector4をGLfloat*に変換しようとするのでしょうか。型キャストを伴わない、これを回避する簡単な方法はありますか?私はばかげた間違いをしているだけですか?よろしくお願いします。
javascript - JavaScript は ++ 演算子をどのように扱いますか?
JavaScript は、オブジェクトに対してファンキーな自動変換を行います。
印刷されます:
これは、引数のいずれかがオブジェクト/文字列である場合、+ はすべての引数を文字列に変換してから連結しようとするためです。すべての引数が数値の場合は、それらを合計します。* および単項 + toString を使用してオブジェクトを数値に変換します (ここには示されていませんが、valueOf も同様です)。
JavaScript は ++ 演算子に対して何をしますか?
c# - 演算子==をC#のジェネリック型に適用できませんか?
MSDN==
のオペレーターのドキュメントによると、
事前定義された値型の場合、等価演算子(==)は、オペランドの値が等しい場合はtrueを返し、そうでない場合はfalseを返します。文字列以外の参照型の場合、2つのオペランドが同じオブジェクトを参照している場合、==はtrueを返します。文字列タイプの場合、==は文字列の値を比較します。ユーザー定義の値型は、==演算子をオーバーロードする可能性があります(演算子を参照)。したがって、ユーザー定義の参照型も可能ですが 、デフォルトでは、==は、事前定義された参照型とユーザー定義の参照型の両方について上記のように動作します。
では、なぜこのコードスニペットはコンパイルに失敗するのでしょうか。
エラー演算子'=='はタイプ'T'および'T'のオペランドには適用できません。私が理解している限り、==
演算子はすべてのタイプに対して事前定義されているので、なぜだろうか?
編集:ありがとう、みんな。最初は、ステートメントが参照型のみに関するものであることに気づきませんでした。また、すべての値型に対してビットごとの比較が提供されていると思いましたが、これは正しくないことがわかりました。
しかし、参照型を使用している場合、==
演算子は事前定義された参照比較を使用しますか、それとも型が定義されている場合はオーバーロードされたバージョンの演算子を使用しますか?
編集2:試行錯誤の==
結果、無制限のジェネリック型を使用する場合、オペレーターは事前定義された参照比較を使用することがわかりました。実際、コンパイラーは、制限された型の引数に対して見つけることができる最良の方法を使用しますが、それ以上探すことはありません。たとえば、以下のコードは、が呼び出されtrue
た場合でも常に出力されます。Test.test<B>(new B(), new B())
python - Python には三項条件演算子がありますか?
Python に三項条件演算子がない場合、他の言語構造を使用してシミュレートすることは可能ですか?
haskell - $はいつ使用する必要がありますか(常に括弧に置き換えることができます)?
私が読んでいることから、$
「その引数に関数を適用する」と説明されています。ただし、二項演算子であるため、Lispのようには機能しないようです。したがって、実際には、の代わりに(apply ...)
かっこを避けるのに役立つように見えます。私はそれを正しく理解していますか?後者の形式は「悪いスタイル」と見なされますか?foo $ bar quux
foo (bar quux)
c# - C# の IF ( X AND ( 2 ^ Y ) ) Then と同等
If
私はVB6でこの状態を持っています
C#でも同じものが欲しい
のようにしてみました
しかし、これは私にエラーを与えています。
C# に変換したい完全な VB コードを次に示します。
上記のコードintNumber
では、任意の数にすることができます。
vb.net - C# の '??' に相当する VB.NET はありますか? オペレーター?
??
C# の演算子に相当する VB.NET はありますか?
operators - プリミティブな Forth 演算子とは?
Forth システムの実装に興味があります。単純な VM とランタイムを構築する経験を積むためです。
Forth を開始する場合、通常、最初にスタックとその演算子 (DROP、DUP、SWAP など) について学習するため、これらを基本的な演算子の 1 つと考えるのが自然です。しかし、そうではありません。それらのそれぞれは、メモリとスタック ポインターを直接操作する演算子に分解できます。後で、DUP や SWAP などの実装に使用できるストア (!) とフェッチ (@) について学びます (ha!)。
では、プリミティブ演算子とは何でしょう? 他のすべてをビルドできるランタイム環境に直接実装する必要があるのはどれですか? 高性能には興味がありません。私 (そして他の人) が学べる何かが欲しいのです。オペレーターの最適化は後で行うことができます。
(はい、私はチューリング マシンから始めて、そこから行くことができることを認識しています。それは少し極端です。)
編集: 私が目指しているのは、オペレーティング システムまたは新しいコンパイラのブートストラップに似ています。これらの基本的な構成要素からシステムの残りの部分を構築できるようにするには、少なくとも何を実装する必要がありますか? これをベア ハードウェアに実装するつもりはありません。教育的な演習として、私は独自の最小限の VM を作成します。