問題タブ [spaceship-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++ - 折り畳み式で宇宙船演算子を使用できますか?
私が試したコンパイラはどれもそのようなコードを受け入れませんでした:
template <int ...a> bool foo() { return (a<=> ... <=>0); }
しかし、それ以外の<=,>=,==,!=,<,>
場合はコンパイルされます。
ここでcppreferenceは明確です<=>
。フォールド式に使用できる二項演算子のリストにはありません。
これは C++ 標準の意図的な省略ですか、それともコンパイラはこれに対応していませんか?
問題は純粋な好奇心です。この分野での C++ の方向性を知りたかっただけです。他のすべての比較演算子は、折りたたみ式と同じくらい意味があるため、許可された演算子の折りたたみ式リストから削除されると想像でき<=>
ます...
c++ - 親クラスが自身の宇宙船オペレーターを定義していない場合の宇宙船オペレーターのオーバーライド
次のコードは、コンパイラによって異なる方法で処理されます。
GCC と MSVC の両方がそれを受け入れますが、エラーを返す Clang は受け入れません:
デモ: https://gcc.godbolt.org/z/WGrGTe89z
はI::operator <=>(const I&) const
定義されていないため、A::operator <=>(const A&) const
暗黙的に削除する必要があり、削除されたメソッドは から削除されていないメソッドをオーバーライドすることはできませんI
。他のコンパイラもコードを受け入れる権利を持っていますか?
c++ - 異なるタイプ間で operator== を実装するために 3 者間比較 (宇宙船 op) を使用する方法は?
簡単なタスク: 私はこれらの 2 つのタイプを持っています
私はこの新しい C++20 の宇宙船 op を使いたいと思っていますtype_a{} == type_b{}
。私はそれをすることができませんでした。それらの間で書いてもoperator<=>
、 を呼び出すことしかできtype_a{} <=> type_b{}
ず、単純な比較はできません。単一のクラスと同様に混乱します。3 者間比較は他のすべてのクラスも定義します。
代替処方?std::three_way_comparable_with<type_a, type_b>
それが真実であるようにするにはどうすればよいですか?