【问题标题】:how does the initialization A(ob) work, where ob is an object of class A初始化 A(ob) 是如何工作的,其中 ob 是 A 类的对象
【发布时间】:2013-09-26 19:13:10
【问题描述】:

A 是这样定义的类:

class A
{
  public:
     int x; 
}

还有主要的:

int main()
{
   A(ob);    // note that copy constructor doesn't get called
   ob.x = 1; // just to show that ob's members can be accessed
}

这是一个不同的 main():

int main()
{
  A ob;
  A ob2 = A(ob); // copy constructor gets called and everything happens as expected
}

我从未在 c++ 中看到过这样的实例化。 A(ob) 不是应该通过调用 A 的构造函数来进行函数样式类型转换,其中 ob 是先前声明的对象吗?

编辑:在第二个 main() 中,A(ob) 用作 ob2 的初始化器。

【问题讨论】:

  • @Kal 没有可省略的副本。你会从什么地方复制?您刚刚默认构造了一个名为 obA
  • @juanchopanza 是的,我不知道它和A ob 一样,还以为是从ob 复制到临时文件中

标签: c++ class object


【解决方案1】:
A(ob); 

等同于:

A ob; 

大括号是多余的。所以以下同上:

A((ob)); 
A(((ob))); 
A((((ob)))); 

所有都是等价的。但这并不意味着你应该写这个。只写更容易阅读的内容。

【讨论】:

    【解决方案2】:

    看起来很奇怪

    A(ob);
    

    等价于

    A ob;
    

    在您的代码中。

    【讨论】:

    • 是的。那正是我所想。 A(ob) 在之前定义了 ob 并且你用它初始化另一个对象时的工作方式不同。
    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多