プロが教えるわが家の防犯対策術!

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);
}

A 回答 (2件)

> 実体コピーしたい場合、どのようにすればよいのでしょうか?



単純に代入する。

void test(AA &a)
{
AA b;
a = b;
}

(今回の例なら大丈夫ですが)C++でmemcpyとかmemmoveとかをむやみに使うと危険だと思います。(C言語の遺産です)
なお、memmoveの引数はポインタを渡す必要があります>マニュアル参照。

> const AA &aとすれば、a自体が関数内で書き換わる心配がないので、

これはそう。

> C++の参照型は、ポインタより安全と理解しているのですが

でも、ポインタでも const AA* const aなどできるので、
直接の理由にはならない。

> その認識は間違っていないでしょうか?
ゆえに、間違いを含んでいる。
    • good
    • 0

ポインタと参照の違いは, 関数内で書き換えるかどうかよりも, (無理しない限り) NULL を渡せないというところに留意すべきだと

思います.
    • good
    • 0

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