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

質問

質問者: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
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示