問題タブ [conversion-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++ - C++ でのネストされた暗黙の変換
2 つのレベルで暗黙的な変換が必要でした。次のコード スニペットは、私が直面している問題のプロトタイプです。
次のリンクで提供されている例を調べて、これが達成可能であると確信しました。
c++ - 明示的な ref 修飾された変換演算子テンプレートの動作
次の変換演算子が与えられた場合
次の変換はすべて有効であると予想されますが、コンパイルエラーが発生するものもあります( live example ):
特に、1 は 3 と同じように見え、2 とほとんど同じように見えますが (7 から 9、8 についても同様)、動作が異なります。
説明または回避策はありますか?
私の動機は、さらに別の 'any'です。最終的には、 ,explicit
のような型特性の問題を回避するためにすべての変換演算子を作成する必要がありましたが、新しい問題にぶつかりました。std::is_constructible
std::is_convertible
EDIT申し訳ありませんが、私の間違いである 3 と 9 は無視してください (Kerrek SB に感謝します)。しかし、7 と 8 は問題として残ります。あとexplicit
、やっぱり関係ないようです、すみません。
EDIT 2ちょうどそれに気づいた
変換演算子が でない場合は有効ですexplicit
。そこで、explicit
最初はサンプルでコピー初期化を使用していましたが、切り替えたときにexplicit
直接初期化を使用する必要がありました。その後、この問題が発生しました (ケース 7 および 8)。
c++ - 演算子 float*() は何をしますか?
C++ についてもっと学ぼうとソース コードを調べていると、わかりにくいコードに出会いました。私はそれをいじってその用途を理解することができませんでした。
演算子 float *() の機能とその使用方法を誰かが説明できますか?
I have searched StackOverflow and it looks like it is a conversion operator but I am still unsure what it actually does and why it is useful.
Kind regards,
c++ - 望ましくない C スタイルのキャストがコンパイルされるのを防ぐことができないのはなぜですか?
コンパイルを防ぐことができない望ましくない C スタイルのキャストがあります。望ましくないキャストは、あるクラスのオブジェクトから他のクラスの非 const 参照への C スタイルのキャストを実行します。クラスは無関係です。同時に、同じクラスのオブジェクトから const 参照への C スタイルのキャストをサポートしたいと考えています。望ましいキャストをサポートするために、パブリック変換演算子を提供しています。この場合、望ましくないキャストを防ぐことはできないようです。
非 const 参照へのキャストはビルドに失敗し ( "Sandbox::B::operator Sandbox::A &() " (30 行目で宣言) はアクセスできません*)、const 参照へのキャストは失敗します(エラー: "Sandbox::B" から "const Sandbox::A" への複数の変換関数が適用されます: function "Sandbox::B::operator const Sandbox::A &()" function "Sandbox::B:: operator Sandbox::A &()" ):
演算子を無効にするoperator A& ()
と、必要な変換と不要な変換の両方がビルドされます。
gcc、icc、および MSVC コンパイルを使用しています。クライアント コードを制御できず、C スタイルのキャストを使用できません。