【问题标题】:C++ and class object namesC++ 和类对象名称
【发布时间】:2012-10-31 20:33:15
【问题描述】:

当我有一个类并且我正在制作这个类的一个对象时,例如:

    class Sample{
    ...
    };

    int main(){ Sample object1; ...}

对象的名称只是它的地址吗?当我以递归方式将类对象名称作为参数发送给函数时,我只是发送地址而不是将整个对象复制到内存中?

【问题讨论】:

  • 否,除非函数的参数是引用(Sample& obj) 或指针(Sample* ptr),否则每次调用递归都会调用复制构造。在每次调用时,原始文件保持不变。
  • @Vilo:您的 [invalid] 代码中没有递归。
  • @LightnessRacesinOrbit 那里我又去回答一个问题而不阅读代码(不匹配 =P)
  • @WhozCraig:你的评论没有错
  • @LightnessRacesinOrbit 是的,但是正如您指出的问题/代码关系肯定被破坏了。

标签: c++ class variables parameter-passing


【解决方案1】:

名字不是地址而是名字。它存在于您的源代码和编译中,但根本不存在(有点)。它是一种语义构造,而不是内存中的值。

您在代码中使用其名称的对象发生的事情的规则可以在您的 C++ 书籍中找到。一般来说,副本是默认执行的——以避免通过引用传递副本,或者传递指向对象的指针。

【讨论】:

  • 我提到了与数组一样的名称,当我创建数组 SampleArray[10] 时,它的名称 SampleArray 用作参数将内存地址发送到 SampleArray[0]。所以对于“样本object1;”我必须用 function(&object1);并使用 function(Sample* object2){} 执行它?
  • @Vilo:这是因为在大多数情况下(例如,在您的示例中,因为您不能传递数组),数组表达式可以隐式转换为指向其第一个元素的指针。但是,数组变量仍然代表整个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
相关资源
最近更新 更多