“MyClass mc = MyClass()”或“MyClass mc”?

时间:2012-08-14 11:32:33

标签: c++ initialization

之间有什么区别
MyClass mc = MyClass();

MyClass mc;

在C ++中?

5 个答案:

答案 0 :(得分:8)

第一个调用复制构造函数,临时对象作为参数 - MyClass()创建临时对象。

第二个调用默认构造函数。

实际上,在大多数情况下,它们被优化为相同的代码,但这是语义上的差异。


Negal 所述,案例与POD类型略有不同;当“MyClass”是POD时,第二个片段不会初始化mc,而第一个则会。{/ p>

答案 1 :(得分:2)

第一个是复制初始化,第二个是默认初始化。

例如,以下代码将无法编译:

class MyC
{
public:
MyC(){}
private:
MyC(const MyC&) {}
};

int main()
{
  MyC myc = MyC();
  return 0;
}

答案 2 :(得分:1)

自定义复制构造函数和默认构造函数。

答案 3 :(得分:0)

首先通过temp-object创建c-tor without arguments,然后调用copy-ctor作为对象(不考虑任何优化)。第二次调用c-tor without arguments,无需复制。通过编译器优化,两种情况都是相同的。

差异在于基本类型,所以

// initialized to something
int c;
// initialized to int() that is 0 by standard.
int c = int();

答案 4 :(得分:-3)

没有区别。默认ctor电话。语法糖) 没有复制ctor !!!!

class PPP{
public:
    PPP(PPP&){
        std::cout<<"PPP1"<<std::endl;
    }
    PPP(const PPP&){
        std::cout<<"PPP2"<<std::endl;
    }
    PPP(){
        std::cout<<"PPP3"<<std::endl;
    }
};
PPP ppp = PPP();

并且您在控制台中只找到了PPP。