【问题标题】:Is the copy constructor called when you dereferencing a pointer when passing by reference to a function [duplicate]在通过引用传递函数时取消引用指针时是否调用了复制构造函数[重复]
【发布时间】:2012-07-05 15:19:12
【问题描述】:

可能重复:
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 复制构造函数,则将生成一个临时对象并使用该对象的引用,这将是未定义行为形式的非常坏消息...

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

【问题讨论】:

  • @Oli Charlesworth 该问题因多个拼写错误而关闭
  • @MWright 该问题已关闭,因为它“模棱两可、含糊、不完整、过于宽泛或修辞”。
  • 标记为合并请求。
  • @MWright - 关闭不是永久性的。投票可以重新打开您可以标记的问题并说明您已修复问题,以便版主重新打开它

标签: c++


【解决方案1】:

不,复制构造函数没有被调用。

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

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 2014-01-29
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多