問題タブ [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.
c++ - 削除された関数になる関数はありますか?
ワーキングドラフトは、defaulted-functionsは特別なメンバー関数でなければならないことを明示的に示しています(例えば、copy-constructor、default-constructorなど(§8.4.2.1-1))。これは完全に理にかなっています。
ただし、削除された関数(§8.4.3)にはそのような制限はありません。そうですか?
言い換えれば、これらの3つの例は有効ですc++0
か?
c++ - 「=削除」とは何ですか?
これらの2つの奇妙なコード行はどういう意味ですか?
c++ - C++0x での仮想関数の削除
C++0x で仮想メソッドを削除するとどうなるかは明確ではありません。
これは、このクラスとそれを継承するすべてのものがメソッドを定義/実装できないことを意味しますderive_func()
か? それとも、これは違法/コンパイルエラーですか?
c++ - C++ 2011 で右辺値オブジェクトの const メンバー関数の呼び出しを禁止するにはどうすればよいですか?
次のコード
元のベクトルがそこですでに破壊されているため、クラッシュする可能性があります。右辺値参照が導入された後の C++ 2011 (c++0x) では、ベクトル引数が右辺値である場合、削除された関数宣言を使用して呼び出しを完全に禁止できます。at
それは良さそうに見えますが、次のコードは依然としてクラッシュを引き起こします
operator [] (size_type) const
右辺値オブジェクトのメンバー関数の呼び出しは引き続き許可されるためです。この種の呼び出しを禁止する方法はありますか?
修理:
上記の例は、私が実際のプロジェクトで行ったことではありません。C++ 2011 が次のようなメンバー関数の修飾をサポートしているかどうか疑問に思っています
修理:
それは素晴らしいことですが、C++ 標準はこの機能に行き過ぎていると思います。とにかく、clang ++ 2.9でコンパイルされた次のコードがあります
どうもありがとう!
c++ - エラー: 削除された関数の使用
私は友人が書いたいくつかの C++ コードに取り組んでいますが、gcc4.6 でコンパイルすると、これまでに見たことのない次のエラーが発生します。
編集: これは、ブースト MSM を使用したコードの一部からのものです: Boost Webpage
Edit2: ソースコードの= delete()
どこにも使用されていません。
一般的に言えば、このエラーはどういう意味ですか? この種のエラーが発生した場合、何を探す必要がありますか?
c++ - 関数経由でストリームを開く
s のコピー不可能な性質について助けが必要[io](f)stream
です。
fstream
Windows でファイル名に Unicode 文字を含むファイルを処理するには、s の周りにハック的なラッパーを提供する必要があります。このために、ラッパー関数を考案しました。
もちろん、std::swap
ラインが犯人です。関数からストリームを返すことも試みましたが、同じ問題が発生します。a のコピー コンストラクタstd::istream
はdelete
d です。私も試してみましたstd::move
が、それは役に立ちませんでした。この問題を回避するにはどうすればよいですか?
編集:Keep It Simple (TM)
@tiburのアイデアのおかげで、私はついに良い方法を見つけましたが、機能的です。使用されている Windows 標準 C++ ライブラリに依存するという意味ではまだハックですが、実際に使用されているのは 2 つだけなので、私にとってはそれほど問題ではありません。
そしてユーザーコードでは:
これは C++0x<memory>
とauto
キーワードに依存します。もちろんclose
、結果のstream
変数だけを取得することはできませんが、GNU Libstdc++std::istream
デストラクタがファイルを閉じる処理を行うため、余分なメモリ管理はどこにも必要ありません。
c++ - このコピー不可能なマップは合法的な c++11 ですか? GCC 4.7 と MSVS 2010 では許可されています。Clang 3.1 はそうではありません
clang でコンパイルできないコピー不可のマップを作成しました。clang は非常に標準に準拠することを意図しているため、自分のコードが合法かどうか疑問に思っていました。MSVS 2010 および GCC 4.7 は、警告やエラーなしでこのコードをコンパイルします。
完全なコードが添付されています: 問題のある行は の最後の行ですmain
。
= delete
MSVS 2010 では削除が必要
使用時のエラーメッセージclang++-mp-3.1 -std=c++0x -stdlib=libc++ MapOfMaps.cpp
は次のとおりです。
c++ - デフォルトのコンストラクタとデストラクタの「=default」は「{}」とどう違うのですか?
当初はデストラクタのみの質問として投稿しましたが、現在はデフォルト コンストラクタの考慮を追加しています。元の質問は次のとおりです。
クラスに仮想デストラクタを与えたいが、それ以外はコンパイラが生成するものと同じである場合は、次を使用できます
=default
。しかし、空の定義を使用して、より少ない入力で同じ効果を得ることができるようです:
これら 2 つの定義の動作が異なる方法はありますか?
この質問に対して投稿された回答に基づいて、デフォルトのコンストラクターの状況は似ているようです。=default
デストラクタの " " と " "の意味にほとんど違いがないことを考えると{}
、デフォルト コンストラクタのこれらのオプションにも同様に意味の違いはほとんどないのでしょうか? つまり、そのタイプのオブジェクトが作成され、破棄されるタイプを作成したいと仮定すると、なぜ私は言いたいのですか?
それ以外の
?
元の投稿が SO ルールに違反している後にこの質問を拡張した場合は、お詫び申し上げます。デフォルトのコンストラクターについてほぼ同じ質問を投稿することは、あまり望ましくないオプションだと思いました。
c++ - コピー可能で移動できないクラスのユースケースはありますか?
@Mehrdadによるこの最近の質問を読んだ後、どのクラスを移動不可、したがってコピー不可にする必要があるかについて、コピーできるが移動できないクラスのユースケースがあるかどうか疑問に思い始めました。技術的には、これは可能です。
コピーコンストラクターがS
ありますが、それは明らかに概念をモデル化していません。これCopyConstructible
は、概念の改良でありMoveConstructible
、(削除されていない)移動コンストラクターの存在を必要とするためです(§17.6.3.1 / 2、表21を参照)。 。
S
上記のようなタイプのユースケースはありますか?これはコピー可能ですが、 CopyConstructible
移動できませんか?そうでない場合、同じクラスでコピーコンストラクターと削除された移動コンストラクターを宣言することが禁止されていないのはなぜですか?