質問 |
||
| 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 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |