質問 |
||
| 質問者:tobasu | 参照型の変数をポインタ引数を持つ関数に引数を書く方法 | |
|---|---|---|
困り度:
|
C++の参照を使って以下のソースを試したのですが、 memmoveの引数のところでエラーが出ます。 memmoveの引数はポインタ型で合いません。 実体コピーしたい場合、どのようにすればよいのでしょうか? const AA &aとすれば、a自体が関数内で書き換わる心配がないので、 C++の参照型は、ポインタより安全と理解しているのですが その認識は間違っていないでしょうか? struct aa{ int x; int y; }AA; void test(AA &a) { AA b; memmove(b, a, sizeof(AA)); } void main(){ AA c; test(c); } |
|
質問投稿日時:08/05/03 19:33 質問番号:3995184 |
||
回答良回答10pt |
|
| 回答者:Tacosan | ポインタと参照の違いは, 関数内で書き換えるかどうかよりも, (無理しない限り) NULL を渡せないというところに留意すべきだと思います. |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/05/04 00:19 回答番号:No.2 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:MrBan | > 実体コピーしたい場合、どのようにすればよいのでしょうか? 単純に代入する。 void test(AA &a) { AA b; a = b; } (今回の例なら大丈夫ですが)C++でmemcpyとかmemmoveとかをむやみに使うと危険だと思います。(C言語の遺産です) なお、memmoveの引数はポインタを渡す必要があります>マニュアル参照。 > const AA &aとすれば、a自体が関数内で書き換わる心配がないので、 これはそう。 > C++の参照型は、ポインタより安全と理解しているのですが でも、ポインタでも const AA* const aなどできるので、 直接の理由にはならない。 > その認識は間違っていないでしょうか? ゆえに、間違いを含んでいる。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/05/03 19:49 回答番号:No.1 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |