在通过引用函数传递时解除引用指针时调用的复制构造函数

时间:2012-07-05 15:19:12

标签: c++

  

可能重复:
  dereferencing a pointer when passing by reference

在通过引用函数传递时取消引用指针时是否调用了复制构造函数?

这是一个简单的例子

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 copy构造函数,那么就会产生一个临时对象,并且会使用它的引用,这将是一个非常糟糕的新闻行为...

那么会发生什么......未定义的行为?

1 个答案:

答案 0 :(得分:7)

不,不会调用复制构造函数。

dereference运算符创建一个引用现有对象的左值。引用参数绑定到此现有对象。