【问题标题】:C++ Constructor calling [duplicate]C ++构造函数调用[重复]
【发布时间】:2020-11-03 18:49:18
【问题描述】:

假设我有一个程序:

class A {
public:
    A() { cout << '1'; }
    A(int i) { cout << '2'; }
};

int main() {
    A a;
    a = 0;

    return 0;
}

这个程序的结果将是 12。 所以我的问题是 - 当我已经创建了对象并调用了第一个构造函数时,为什么我能够通过 a = 0 调用第二个构造函数。我不明白这个的整个概念。构造函数不应该只调用一次(在对象创建期间)吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    构造函数不应该只调用一次(在对象创建期间)吗?

    是的,就是这样。

    当您执行a = 0; 时,将调用复制赋值运算符A &amp;operator=(const A &amp;)。由于第二个操作数是int 而不是A,因此会构造一个新的A 临时实例,并将其传递给赋值运算符,然后在完成后立即销毁。

    【讨论】:

      【解决方案2】:

      A(int) 构造函数允许从intA 的隐式转换。

      那么会发生什么:

      a = 0;
      

      真的是:

      a = A(0);
      

      如果要禁止此类隐式转换,则需要使构造函数explicit

      explicit A(int);
      

      【讨论】:

        【解决方案3】:

        这种类型的构造函数称为“转换构造函数”。

        这些类型的构造函数用于在 C++ 中执行隐式类类型转换。

        Here你想看的话可以找一个小文档。

        【讨论】:

          猜你喜欢
          • 2018-10-17
          • 1970-01-01
          • 1970-01-01
          • 2013-11-06
          • 1970-01-01
          • 2011-07-17
          • 2017-01-05
          • 1970-01-01
          相关资源
          最近更新 更多