- ベストアンサー
構造体の代入と比較
構造体のコピーは以下のようで正しいと思いますが、 struct A { int a; }; struct x, y; x.a=1; y = x; 構造体の比較は if (x != y)ではいけないのでしょうか? 構造体に限らずクラスも同じ考えでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
★軽くアドバイス ・回答者No.3さんの >if (memcmp(&x, &y, sizeof(struct A)) != 0) この方法はちょっと注意が必要です。 アライメントに気をつけましょう。 ・代入の方は古いCコンパイラでは無理なことがあります。 最近のコンパイラなら問題はありません。
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
回答No.3
構造体のメモリを全部比較するという意味なら if (memcmp(&x, &y, sizeof(struct A)) != 0) で出来ます。
- jx-word
- ベストアンサー率40% (38/94)
回答No.2
構造体の代入はその方法で問題ありません。 比較の方は、構造体を丸ごと比較する方法はなく、メンバーを一つ一つ地道に比較するしかありません。 http://www.kouno.jp/home/c_faq/c2.html#8 C++のクラスも同様ですが、普通はoperator==をオーバーロードして比較処理を作成します。
- lesskey
- ベストアンサー率33% (66/200)
回答No.1
# if (x != y)ではいけないのでしょうか? 構造体ではこの比較は出来ないと思いますが、 C++のクラスであれば演算子の多重定義(演算子オーバーロード)を 使うことで実現が出来ます。リンク先を参照ください。