5

重複の可能性:
参照渡し時のポインターの逆参照

関数への参照渡し時にポインタを逆参照するときに、コピー コンストラクタが呼び出されますか?

ここに簡単な例があります

int& returnSame( int &example ) { return example: }

int main()
{
  int inum = 3;
  int *pinum = & inum;

  std::cout << "pinum: " <<  returnSame(*pinum) << std::endl;

  return 0;          

}

何が起こっていると思いますか:

pinum を逆参照すると、コピー コンストラクターが呼び出されると予想されますが、関数は値渡しなので、これは呼び出されませんか?

pinum コピー コンストラクターが呼び出された場合、一時オブジェクトが生成され、その参照が使用されます。これは、未定義の動作という形で非常に悪いニュースになります...

では、何が起こるのでしょうか...未定義の動作ですか?

4

1 に答える 1

10

いいえ、コピーコンストラクタは呼び出されません。

間接参照演算子は、既存のオブジェクトを参照する左辺値を作成します。参照パラメーターは、この既存のオブジェクトにバインドされています。

于 2012-07-05T15:20:43.407 に答える