問題タブ [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++ - この場合、コピーコンストラクターが呼び出されないのはなぜですか?
小さなコード スニペットを次に示します。
出力は「通常のコンストラクター」(RHS の場合) に続いて、LHS の「コピー コンストラクター」になると想定しました。だから私はこのスタイルを避け、常にクラスの変数を として宣言しましA a(5);
た。しかし、上記のコードで驚いたことに、コピー コンストラクターは呼び出されません (Visual C++ 2008)
この動作がコンパイラの最適化の結果なのか、それとも C++ の文書化された (および移植可能な) 機能の結果なのか、誰にもわかりませんか? ありがとう。
c++ - g++での奇妙なC++コンストラクター/コピーコンストラクターの問題
このコードは、コピーコンストラクターも呼び出します。なぜこれが機能するのですか?このプログラムを初めて実行したとき、セグメントに障害が発生したことを思い出します。しかし、しばらくして、それはこのコピーの短所を呼び始めました。そして今は動作します!! Wierd。
しかし、私が置き換えると、fun()は次のようになります。
次に、短所をコピーします。は呼び出されません。コピーの短所だと思いました。この場合は呼び出されます。しかし、@ flyfishr64が指摘しているように、ここではRVOが登場します。しかし、それでも私が参照を返す場合については説明していません。私はそれが常にセグメンテーション違反であるべきだと思います。
説明はありますか?
c++ - 一時オブジェクトで必要なコンストラクターのコピー
次のコードは、コピー コンストラクターが使用可能な場合にのみ機能します。
(経由で)printステートメントを追加std::cout
し、コピーコンストラクターを使用可能にすると、それは使用されません(不要なコピーを削除するためにコンパイラーのトリックが発生していると思います)。
しかし、出力operator <<
と以下の関数plop()
(一時オブジェクトを作成する場所) の両方で、コピー コンストラクターの必要性がわかりません。const 参照 (または私が間違っていること) ですべてを渡しているときに、言語がそれを必要とする理由を誰かが説明できますか?
コンパイラ:
[Alpha:~/X] myork% g++ -v
組み込み仕様を使用。
ターゲット: i686-apple-darwin10
構成: /var/tmp/gcc/gcc-5646~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/ usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple- darwin10 --target=i686-apple-darwin10
スレッド モデル: posix
gcc バージョン 4.2.1 (Apple Inc. ビルド 5646)[Alpha:~/X] myork% g++ t.cpp
t.cpp: 関数 'int main()':
t.cpp:10: エラー: 'N::N(const N&)' はプライベート
t.cpp: 25: エラー: このコンテキスト内
t.cpp:10: エラー: 'N::N(const N&)' はプライベート
です t.cpp:26: エラー: このコンテキスト内
これは実際のコードの簡略版です。
実際のコードには、std::auto_ptr を含むクラスがあります。これは、const 参照を取るコピー コンストラクターが有効ではないことを意味し (何らかの作業がなければ)、そのためにコピー コンストラクターが使用できないことを示すエラーが発生していました。
クラスも変更します。
エラーは次のとおりです。
t.cpp:25: エラー: 'N::N(N)' の呼び出しに一致する関数がありません</p>
c++ - 解析エラーを引き起こすコピー コンストラクターのバグとは何ですか?
私は小さな言語用のコンパイラを書いています。私の Parser クラスは現在、後で使用する AST の構築を担当しています。ただし、子ノードを保持する各 AST ノードのベクトルが正しく機能しないため、再帰式が正しく機能しません。現在、AST のヘッダー ファイルは次のようになっています。
問題を引き起こしている式解析コードは次のとおりです。
機能しない式の例は、+ 1 + 2 + 3 4 です。これは、次のような AST に解析する必要があります: + [1, + [2, + [3, 4]] ですが、代わりに次のようになります: + [ 1, + []]
私が間違っていることについて何かアドバイスはありますか?
c++ - コピーコンストラクターと代入演算子
コピーコンストラクターが呼び出されたときと代入演算子が呼び出されたときをテストするために、次のプログラムを作成しました。
code>これにより、次の出力が得られます(わかりやすくするためにempy行を追加しただけです)。
2番目と3番目のセットは期待どおりに動作しますが、最初のセットでは、代入演算子が使用されていても、コピーコンストラクターが呼び出されます。
この動作はC++標準の一部ですか、それとも単に賢いコンパイラ最適化ですか(私はgcc 4.4.1を使用しています)
c++ - 別のメソッドからコピーコンストラクターを呼び出すことはできますか?
単にコピーコンストラクターを呼び出すcopyというメソッドを作成しようとしています。このメソッドをメインでテストすると、ターゲットリストはまだ空のままです。私はそれをステップスルーし、すべての正しい行が実行されましたが、コピーコンストラクターが戻ったときに何も保存されていないようです。これはスコープと関係があると思いますが、問題を特定することはできません。ドライバープログラムは次のとおりです。
c++ - コピーコンストラクターは無限ループを呼び出します
コピーコンストラクターに値を参照として渡していますが、無限ループが呼び出されています。
これが私のクラスです:
メソッドの実装は次のとおりです。
クラスにアクセスする方法は次のとおりです。
私が得た結果は次のとおりです。
以前に作成されたオブジェクトを初期化しようとすると、無限ループが発生します。tempVector1をtempVector2にコピーしようとすると、無限ループも発生します。
なぜそれが起こるのですか、そしてどうすればそれが無限ループに入るのを防ぐことができますか?
前もって感謝します。
c++ - このC++オブジェクトをコピー不可にするにはどうすればよいですか?
タイトルを参照してください。
私は持っています:
Fooをコピーできないようにするには、ここから何をする必要がありますか?
ありがとう!