問題タブ [deleted-functions]

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.

0 投票する
2 に答える
105 参照

c++ - 変換演算子と削除されたコンストラクター

次のコードを参照してください。

ここで、Yを受け取る のコンストラクターXは明示的に削除され、 whileXには への変換演算子がありYます。これらの真っ向から対立する2つの中で、=delete常に勝つようです。GCC、Clang、および VC++ のいくつかの最近のバージョンでテストしました。

質問: それは「正しい」動作ですか? 変換コンストラクターと変換演算子の間に特に優先順位はないと思ったので、上記のコードはオーバーロード解決のあいまいさエラーを生成するはずです。しかし、そうではありません。削除された機能の使用について文句を言います。コピーの省略が保証されているためですか?

グーグルで検索して、 Conversion constructor vs. conversion operator: precedenceを見つけました。その質問ではconst、変換コンストラクターに が存在するため、より適切に一致するため、変換演算子が選択されています。ただし、私の場合、置き換えY(X&)Y(X const&)も何も変わりませんでした。


実際、私が望んでいる状況は次のとおりです。

X <- int&はい、これをばかげていると呼ぶかもしれませんが、実際には、そのように動作する組み込み型がありますY <- int&&。組み込みの参照型を正確に模倣するユーザー定義型を作成できないことは、現在の C++ では本当に必死に欠けている部分のようです...