之间有什么区别
MyClass mc = MyClass();
和
MyClass mc;
在C ++中?
答案 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)
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。