0

試験でこんな問題が出ました

パラメーターの受け渡しでは、関数呼び出し中に、パラメーターがコピーされます => 各パラメーターのコピー コンストラクターへの呼び出し。List がパラメーターとして渡されると、リストのすべての要素がコピーされます。リストへの参照の場合は、リストのアドレスのみがコピーされます。それらの発言についてどう思いますか。

私の回答は「リストへの参照であれば、アドレスだけでなく値もコピーされる」で、10点中5点でした。私の答えは間違っていましたか?私にとって、それは私が得たものです。上記のステートメントは正しいですか?

4

2 に答える 2

6

参照渡しの場合、オブジェクトのコピーは作成されません。これが、参照渡しと値渡しの違いです。

内部では、参照はポインターとして実装されているため、アドレスがコピーされていると言えますが、それは実装の詳細です。

ただし、定式化は間違っています。

List がパラメーターとして渡されると、リストのすべての要素がコピーされます。リストへの参照の場合は、リストのアドレスのみがコピーされます。

リストまたはリストへの参照を渡すかどうかは問題ではありません。重要なのは、メソッドがどのようにパラメーターを取得するか (値または参照のいずれか) です。

void foo(list l);
void goo(list& l);

list x;
list& y = x;

foo(x);  //pass a list by value          --copy is made
foo(y);  //pass a reference by value     --copy is made

goo(x);  //pass a list by reference      --no copy of the list
goo(y);  //pass a reference by reference --no copy of the list
于 2012-11-06T08:47:56.850 に答える
0

あなたの答えは間違っています。参照によって変数を渡す場合、変数 (アドレス) へのポインターを渡してから逆参照するのと同じで、このプロセス中に変数のコピーは作成されません。

于 2012-11-06T08:49:01.203 に答える