問題タブ [operator-keyword]
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++ - C ++でオーバーロードされた算術演算子の最良のシグネチャは何ですか?
オーバーロードされた operator+= メンバー関数の存在を前提として、operator+ の標準的な形式は次のようになると想定していました。
しかし、これも機能することが指摘されました。
本質的に、このフォームは一時オブジェクトの作成を実装の本体から関数呼び出しに転送します。
2 つのパラメーターの型が異なるのは少しぎこちなく思えますが、2 番目の形式に問題はありますか? どちらかを優先する理由はありますか?
c++ - C++演算子のあいまいさ
私はC++にかなり慣れていないので、許してください。しかし、演算子のあいまいさに関して問題があります。デスクトップでコンパイルされたコードについては、コンパイラ固有だと思います。しかし、私のラップトップではコンパイルできません。何が悪いのかはわかっていると思いますが、それを回避するためのエレガントな方法はわかりません。明らかな間違いがある場合はお知らせください。とにかく、これが私がやろうとしていることです:
私はVector4と呼ばれる独自のベクトルクラスを作成しました。これは次のようになります。
次に、問題を引き起こしているこれらの演算子があります。
Vector4クラスのインスタンスをglVertex3fvに渡すことができるように、変換演算子があります。明らかな理由で添え字を付けています。ただし、Vector4の添え字を含む呼び出しは、コンパイラーにとってあいまいになります。
候補者は次のとおりです。
添え字演算子が既にVector4で定義されているのに、なぜ最初にVector4をGLfloat*に変換しようとするのでしょうか。型キャストを伴わない、これを回避する簡単な方法はありますか?私はばかげた間違いをしているだけですか?よろしくお願いします。
c++ - C++ コンパイラが関数を見つけられません (名前空間関連)
私は Visual Studio 2008 で C++ プログラミングの課題に取り組んでいます。次の名前空間階層を定義するファイルが提供されました (名前はこの投稿のためのものです。「名前空間 XYZ-NAMESPACE」は冗長であることはわかっています)。
MAIN-NAMESPACE の内容は多数のファイルに分割されており、何らかの理由で、Set と LinkedList の両方の operator<< が完全に MAIN-NAMESPACE の外側にある (ただし、Set と LinkedList のヘッダー ファイル内にある) ことがわかりません。セットバージョンは次のとおりです。
ここに問題があります。次のデータ構造があります。
MAIN-NAMESPACE 内のクラスにあるように定義されています。クラスのインスタンスを作成し、セットの 1 つを出力しようとすると、「エラー C2679: バイナリ '<<' : タイプ 'const MAIN-NAMESPACE: :POINTER-COLLECTIONS-NAMESPACE::Set' (または受け入れ可能な変換がない)
ただし、main() 関数を作成し、セット A を作成し、それを埋めて、演算子を使用すると、機能します。
何が問題なのですか?(注:思いつく限り、using と include の任意の組み合わせを試しました)。
c++ - テンプレート化されたostream<<演算子を作成しないコンパイラ
私はクラスを持っており、頭の中で次のように定義されています:
実装ファイルには、次のものがあります。
これはすべてかなりコーシャに見えます。ただし、この演算子(つまり、std :: cout << MyClass())を使用しようとすると、次のリンカーエラーが発生します。
コンパイラが自動的にこれを生成していないことに驚いています...私が間違っていることについて何か提案はありますか?
c++ - C++ で暗黙的な変換を介して演算子を見つけることができません
ヒープ割り当てオブジェクトのラッパーとして機能するクラスを作成しているときに、この単純な例に要約できる暗黙的な型変換の問題に遭遇しました。
以下のコードでは、ラッパー クラスがヒープ割り当てオブジェクトを管理し、暗黙的にそのオブジェクトへの参照に変換します。これにより、暗黙的な変換が行われるため、ラッパー オブジェクトを引数として関数 write(...) に渡すことができます。
ただし、明示的なキャストが行われない限り、operator<<(...) の呼び出しを解決しようとすると、コンパイラは失敗します (MSVC8.0、Intel 9.1、および gcc 4.2.1 コンパイラで確認)。
では、(1) この場合、暗黙的な変換が失敗するのはなぜですか? (2)引数依存のルックアップに関連している可能性がありますか?(3)明示的なキャストなしでこれを機能させるためにできることはありますか?
c++ - C++ const std::map 参照がコンパイルに失敗する
std::map
as constへの参照を渡すと [] 演算子が壊れる理由はありますか? const を使用すると、次のコンパイラ エラー (gcc 4.2) が発生します。
エラー: 'map[name]' の 'operator[]' に一致しません</p>
関数のプロトタイプは次のとおりです。
const
また、の前のキーワードを削除しても問題ありませんstd::map
。
私が正しく指示されていれば、キーが見つからない場合、[] 演算子は実際に新しいペアをマップに挿入します。これはもちろん、これが起こる理由を説明しますが、これが実際に起こるとは想像できません。許容される動作。
[] の代わりにfindを使用するなど、より良い方法があれば、それをいただければ幸いです。ただし、find が機能しないようです... const不一致の反復子エラーが発生します。
c++ - 「演算子」変数を作成する方法は? (C++)
私は式クラスの作成に取り組んでいます:
ご覧のとおり、演算子クラスが必要なため、これは疑似コードです。私の最初の考えは、可能なすべての演算子の配列を作成し、それを文字列に変換することでしたが、演算子の数が非常に多く、2次元配列以外で文字列に変換する方法のためにうまくいきませんでした.ここで、n[0][0] には最初の演算子があり、n[0][1] にはその演算子文字列があります。
私の式クラスに演算子の値を追加するための提案はありますか?
c++ - C++ での += のオーバーロード
operator+ と operator= をオーバーロードした場合、次のようなものが機能するために operator+= をオーバーロードする必要がありますか?