2012-05-14 10 views
0

私はC言語でいくつかのコードを使用しています。 私は主にmemsetまたはmemcpyを使ってバッファを/からバッファにデータをコピーします。C++での構造

これはC++で動作することを知りたがっていますか? MSDNあたり 'として :C++、構造では

は、そのメンバーがデフォルトで 公開されていることを除き、クラスと同じです。

は、だからそれは、構造物とのmemsetやmemcpyのにして内部を挿入しますC++コンパイラはC.また

にように動作しないことを意味し、「この」ポインタも構造物に適用可能であり、そこに任意のです私は何かを挿入することからコンパイラを停止することができます私のオブジェクトにC + +のish?

答えて

3

あなたの構造がC++構造(バーチャル・ミックスなど)を使用しない限り、memcpymemsetは、C++でさえそれらのもので動作します。

また、 'this'ポインタは構造体に適用できますか?
はい、thisポインターは、クラスの場合と同じように構造体に適用されます。

コンパイラが私のオブジェクトにC++ ishを挿入するのを止める方法はありますか?
構造体にC++構造体を使用しない限り、コンパイラは使用できません。

1

あなたは限り、あなたのstruct(またはclass)など、自由にmemXXXXを使用して非自明c'tors/D'のTORS(コンストラクタ/デストラクタ)せず、唯一の順序のデータ・タイプまたはそれらからなる構造体/クラスが含まれています。

この場合でも、classまたはstruct - これは問題ではありません。

+1

私は仮想機能も要件ではないと思います。 –

0

私はいくつかのコードをC言語で使用しています。私は主にmemsetまたはmemcpyを使ってバッファを/からバッファにデータをコピーします。

これはC++で動作することを知りたがっていますか? 'as MSDN:

C++では、構造体は、そのメンバが既定でpublicである点を除いて、クラスと同じです。

はい - MSDNは正しいですが、それはC++ classをコピーする構造体は、クラスのように複雑になる可能性がかなりあること、C structのコピーと同様に安全ではありませんし、どちらも一般的に安全であることを意味するものではありません。正しくデフォルト/コピーされたオブジェクトを使用して移動し、memset/memcpy操作を実行することをお勧めします。 memsetmemcpyは限られたケースでしか動作しません(基本的には、class/structとそのすべてのベースにはCで動作するものしか含まれていません(仮想ディスパッチテーブルへのポインタはmemsetによって正しく設定されません。 a memcpy - すべてのインプリメンテーション定義)、不変量を維持しようとしません。実際には、クラスはしばしば不変量を持つか、コード/データの単位をカプセル化する自己管理型になります。コンストラクタは、これらの不変量を保持しないで、データメンバが関連した一貫性のある期待値を持つことを保証します。最も単純なクラスをすべて無効にする可能性があります。そのクラスは後で未定義の動作を示す可能性があります。

また、 'this'ポインタは構造体にも適用できますが、コンパイラがC++ ishをオブジェクトに挿入するのを止めることができますか?

はい - 再度C++でstructclassとしてエンティティと同じ種類である - 唯一の違いは、メンバ関数とデータの可視性/アクセシビリティです。どちらもポインタthisを持っています。しかし、このポインタはクラス/構造体には格納されません。メンバー関数への呼び出しに暗黙的に提供されるオブジェクトへのポインタです。あなたはmemcpymemsetを使って(ab)の文脈でこれについて心配する必要はありません。より一般的には、あなたが心配しなければならない唯一のC++特有の事柄は、無効化されるかもしれないvirtual関数とクラス不変式です。 memcpy同じリソース(ファイルディスクリプタ、ヒープへのポインタ、ロックなど)を使用して複数のオブジェクトを作成することは、Cの問題についてはまだ心配する必要があります。両方のオブジェクトは、そのリソースを排他的に制御し、それは後で。

0

だからそれはC++コンパイラはありません、それはない 構造物

にして内部を挿入することを意味します。

とmemsetのかmemcpyのは、それはどちらかのことを意味するものではありませんC.

のように動作しません。

あなたの推測はまったく刺激されず、あなたの質問は不明なままです。