アプリ版:「スタンプのみでお礼する」機能のリリースについて

構造体のコピーは以下のようで正しいと思いますが、

struct A {
int a;
};

struct x, y;

x.a=1;
y = x;

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

構造体に限らずクラスも同じ考えでしょうか?

A 回答 (4件)

★軽くアドバイス


・回答者No.3さんの
>if (memcmp(&x, &y, sizeof(struct A)) != 0)
 この方法はちょっと注意が必要です。
 アライメントに気をつけましょう。
・代入の方は古いCコンパイラでは無理なことがあります。
 最近のコンパイラなら問題はありません。
    • good
    • 2

構造体のメモリを全部比較するという意味なら


if (memcmp(&x, &y, sizeof(struct A)) != 0)
で出来ます。
    • good
    • 0

構造体の代入はその方法で問題ありません。


比較の方は、構造体を丸ごと比較する方法はなく、メンバーを一つ一つ地道に比較するしかありません。

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

C++のクラスも同様ですが、普通はoperator==をオーバーロードして比較処理を作成します。
    • good
    • 0

# if (x != y)ではいけないのでしょうか?


構造体ではこの比較は出来ないと思いますが、
C++のクラスであれば演算子の多重定義(演算子オーバーロード)を
使うことで実現が出来ます。リンク先を参照ください。

参考URL:http://wisdom.sakura.ne.jp/programming/cpp/cpp27 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!