ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4002007 構造体の代入と比較
質問者:tobasu 構造体のコピーは以下のようで正しいと思いますが、

struct A {
int a;
};

struct x, y;

x.a=1;
y = x;

構造体の比較は
if (x != y)ではいけないのでしょうか?

構造体に限らずクラスも同じ考えでしょうか?
困り度:
  • 困っています
質問投稿日時:
08/05/06 17:24
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.4 ★軽くアドバイス
・回答者No.3さんの
>if (memcmp(&x, &y, sizeof(struct A)) != 0)
 この方法はちょっと注意が必要です。
 アライメントに気をつけましょう。
・代入の方は古いCコンパイラでは無理なことがあります。
 最近のコンパイラなら問題はありません。
回答者:Oh-Orange
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
08/05/07 09:44
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.3 構造体のメモリを全部比較するという意味なら
if (memcmp(&x, &y, sizeof(struct A)) != 0)
で出来ます。
回答者:php504
種類:回答
どんな人:一般人
自信:参考意見
回答日時:
08/05/07 09:35
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答10pt

ANo.2 構造体の代入はその方法で問題ありません。
比較の方は、構造体を丸ごと比較する方法はなく、メンバーを一つ一つ地道に比較するしかありません。

http://www.kouno.jp/home/c_faq/c2.html#8

C++のクラスも同様ですが、普通はoperator==をオーバーロードして比較処理を作成します。
回答者:jx-word
種類:回答
どんな人:経験者
自信:自信あり
回答日時:
08/05/07 00:08
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 # if (x != y)ではいけないのでしょうか?
構造体ではこの比較は出来ないと思いますが、
C++のクラスであれば演算子の多重定義(演算子オーバーロード)を
使うことで実現が出来ます。リンク先を参照ください。
回答者:lesskey
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/06 18:03
参考URL: http://wisdom.sakura.ne.jp/programming/cpp/cpp27.html
この回答へのお礼この回答にお礼をつける(質問者のみ)