• ベストアンサー

構造体の代入と比較

構造体のコピーは以下のようで正しいと思いますが、 struct A { int a; }; struct x, y; x.a=1; y = x; 構造体の比較は if (x != y)ではいけないのでしょうか? 構造体に限らずクラスも同じ考えでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.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++のクラスであれば演算子の多重定義(演算子オーバーロード)を 使うことで実現が出来ます。リンク先を参照ください。

参考URL:
http://wisdom.sakura.ne.jp/programming/cpp/cpp27.html

関連するQ&A