【问题标题】:Constructor called with creating object创建对象时调用的构造函数
【发布时间】:2019-07-25 04:18:19
【问题描述】:
class P{
    public:
    P(int x,int y) { cout << "constructor called" << endl;}
};

int main ()
{
    P(5,4);    // constructor called  
    P p(5,4);  // constructor called
    return 0;
}

以上两个构造函数调用有什么区别?

P(5,4)如何调用构造函数?

【问题讨论】:

  • 您对为什么不应该调用构造函数有什么疑问?两个示例的构造函数调用方式相同。

标签: c++ oop constructor initializer


【解决方案1】:

这两个调用是相同的。

唯一的区别是第二次将创建的对象保存在局部变量p

【讨论】:

    【解决方案2】:

    在 C++ 中,类型名称后跟一个(可能为空)带括号的列表是一个纯右值表达式,(通常)会导致创建该类型的临时对象,并且该列表由构造函数的参数组成。

    例外情况是存在语法歧义时,see here

    P p = P(5,4); 比较,在P(5,4); 中,您仍然拥有相同的右手边,但您只是让对象被创建和销毁,而不是将其与名称p 相关联。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2011-06-29
      • 2013-03-07
      • 1970-01-01
      • 2015-01-15
      • 2023-03-21
      相关资源
      最近更新 更多