問題タブ [default-copy-constructor]
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 ++ 0xでは、非静的データメンバー初期化子は暗黙的なコピーコンストラクターをオーバーライドしますか?
c ++ 0xに関連するN2628によると、非静的データメンバー初期化子は、明示的に定義されたコンストラクターによってオーバーライドできますが、暗黙的に定義されたコピーコンストラクターについては少し曖昧に見えます。
特に、Apple clangバージョン3.0では、構造体(またはクラス)がPODであるかどうかによって動作が異なることに気付きました。
次のプログラムは出力「1」を返します。これは、コピーコンストラクターが右側を無視し、代わりに新しい非静的データメンバー初期化子(この例では、X :: aのブール真の値)を置き換えていることを示します。 )。
ただし、紛らわしいことに、string1をコメントアウトすると
その場合、動作は期待どおりに機能します(出力は「0」です)。おそらく、暗黙的に生成されたコピーコンストラクターがないため、データがコピーされます。
C ++ 0x仕様は、暗黙的に定義されたコピーコンストラクターが右側のコンテンツをコピーしないようにするのが良い考えであることを本当に示唆していますか?それはあまり役に立たず、直感的ではありませんか?非静的メンバー初期化機能は非常に便利だと思いますが、これが正しい動作である場合は、そのトリッキーで直感的でない動作のため、この機能を明示的に回避します。
私が間違っていると言ってください。
更新:このバグはClangソースリポジトリで修正されました。このリビジョンを参照してください。
更新:このバグは、Apple clangバージョン3.1(tags / Apple / clang-318.0.45)(LLVM 3.1svnに基づく)で修正されたようです。このバージョンのclangは、Xcode 4.3forLionの一部として配布されました。
c# - C#構造体の自動ディープコピー
MyStruct
プライベートメンバーprivate bool[] boolArray;
とメソッドを持つ構造体がありChangeBoolValue(int index, bool Value)
ます。
MyClass
私は、フィールドを持つクラスを持っていますpublic MyStruct bools { get; private set; }
既存のオブジェクトから新しいMyStructオブジェクトを作成し、メソッドChangeBoolValue()を適用すると、参照されたものではなく参照が新しいオブジェクトにコピーされたため、両方のオブジェクトのブール配列が変更されます。例えば:
より深いコピーを実装するようにコピーを強制する方法はありますか、それとも同じ問題が発生しないこれを実装する方法はありますか?
MyStructは値型であり、参照が伝播することを望まなかったため、特に構造体にしました。
c++ - 非const引数で定義した場合でも、デフォルトのコピーコンストラクターとoperator =を取得できますか?
C ++では、クラスへの非const参照を取得するコピーコンストラクターとoperator =を定義した場合でも、コンパイラーはconst参照のデフォルトバージョンを提供することになっていますか?
c++ - 宣言されていないコピーコンストラクターは自動的にインラインになりますか?
宣言されていない(自動生成された)コピーコンストラクターは自動的にマークされinline
ますか?
もしそうなら、そしてそれらにマークを付けたくない場合は、inline
手動で定義し、必要なすべてのメンバーを手動でコピーする必要があることを意味します(C ++ 11を使用していないと仮定すると、= default
を活用します)?
c++ - c++コピーコンストラクタ関連のクエリ
答えが5として返されるのはなぜですか。デフォルトでは、C++のコピーコンストラクターは浅いコピーを返します。浅いコピーは参照を意味しませんか?またはmi何かが足りない?
c++ - コピーコンストラクターは違いを定義して宣言しますか?
クラスBaseとClass派生があります。
- クラスでコピーコンストラクターを宣言した場合、コンパイラーはコンパイル中にコピーコンストラクターを定義しますか?
- Derivedクラスのコピーコンストラクターが呼び出された場合はどうなりますか?Baseクラスのコピーコンストラクターに依存していますか?
(標準コンパイル中のコピーコンストラクターの観点から、基本クラスと派生クラスの関係を知る必要があります。コンパイラーはコピーコンストラクターをどのように定義しますか)
c++ - コピーコンストラクターが呼び出されないのはなぜですか?
非常にあいまいなタイトルで申し訳ありません.(私の英語力がないため). より良いタイトルを提案してください。
次のコードを検討してください。
Gcc 4.8.0 はコンパイルに失敗し、エラー メッセージが表示され
error: no matching function for call to 'std::vector<double>::vector(A&)' : a(std::forward<Args>(args)...)
ました。
このコードが間違っている理由がわかりません。私の意見では、コンパイラは行でコピー コンストラクタを呼び出す必要がありますA b = a;
。
ただし、コンストラクターをコメント化されたもの (単に値を取る) に置き換えると、コンパイルします。さらに、デフォルトのコピー (および移動) コンストラクターの行が不要になりました。そこで何が起こるの?
c++ - LLVM で暗黙的に削除されたコピー コンストラクターを呼び出す
C++11 の規則に従って、6 つのもの (デフォルト コンストラクター、コピー コンストラクター、ムーブ コンストラクター、コピー代入、ムーブ代入、およびデストラクタ) がデフォルトで生成されます。2 番目の規則により、カスタムのコピー、移動、またはデストラクタが定義されている場合、それらのデフォルトの操作は生成されません。しかし、それに続く私のコードではそうではありません。しかし、このコードはエラーでコンパイルに失敗します
Uni 用に独自のコピー コンストラクターを作成すると、すべて正常に動作します。(参照用にコードにコメントされています)
どんな考えでも大歓迎です。
最後に、LLVM コンパイラを使用した Xcode の Mac でこれを実行しています。
どうもありがとう...
c++ - コピーコンストラクタでアンパサンドが使用されるのはなぜですか?
クラスのオブジェクトを参照渡しするのはなぜですか。アンパサンド (&) を削除すると、次のエラーが発生します。
これは何を意味するのでしょうか?コンパイラは、与えられたコピー コンストラクターとデフォルト コンストラクターの使用を考慮していない可能性があります。簡単に言えば、なぜアンパサンドを使用し、何が起こるのでしょうか? そうしないと。