回答
的首先调用复制构造,与临时对象作为参数 - MyClass()
创建临时。
第二个调用默认构造函数。
实际上,在大多数情况下,它们都是针对相同的代码进行优化的,但这是语义上的差异。
作为Negal提到的,情况是POD类型有些不同;当“MyClass”是POD时,第二个片段不会初始化mc
,而第一个将会。
+ 1说临时事情。 – 2012-08-14 11:38:46
尽管两种情况都被优化为相同的东西,但结果不同时至少有一种情况。如果'MyClass'是一个POD(普通旧数据)类型,'mC'是局部变量时'MyClass mc'不会导致'mc'被值初始化。第二种方法将创建一个初始化临时值并用它初始化'mc'。 – 2012-08-14 11:46:37
好点,而且它们是否被优化为相同的事情取决于默认构造函数和复制构造函数中的内容。 – 2012-08-14 11:49:03
自定义拷贝构造函数和默认构造函数。
'operator ='不在这里调用。 – 2012-08-14 11:38:38
好的。谢谢 。对不起, – 2012-08-14 11:39:22
首先通过c-tor without arguments
创建temp-object
,然后调用copy-ctor
作为对象(不考虑任何优化)。第二个电话c-tor without arguments
,没有复制。通过编译器优化,两种情况都是相同的。
差异是在基本类型,所以
// initialized to something
int c;
// initialized to int() that is 0 by standard.
int c = int();
第一个是复制初始化,第二个是默认初始化。
例如,下面的代码不会编译:
class MyC
{
public:
MyC(){}
private:
MyC(const MyC&) {}
};
int main()
{
MyC myc = MyC();
return 0;
}
这确实显示了区别。如果拷贝构造函数是私有的,那么一个是合法的,另一个不是。 – 2012-08-14 11:40:09
没有差别。默认ctor呼叫。语法糖) no copy 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。
- 1. “return new MyClass();”和“MyClass mc = new MyClass(); return mc;”
- 2. 什么新MyClass的和新MyClass的()
- 3. 列表<MyClass>与MyClass []
- 4. ArrayList <MyClass> vs MyClass [26]?
- 5. MyClass obj = MyClass(); 'MyClass()'在这里引用临时对象吗?
- 6. Dim c as MyClass&Dim c as New MyClass
- 7. 无法将'MyClass'转换为'MyClass'
- 8. C#列表<MyClass>应从MyClass的
- 9. &PHP中的新MyClass()vs new MyClass()
- 10. 无法转换MyClass的*为const MyClass的
- 11. 在C++中声明指针会更好吗? MyClass * ptr(或)MyClass * ptr?
- 12. VB.Net中的MyClass
- 13. jQuery check .hasClass('[class * =“myclass-”]');
- 14. (MyClass)JavaScriptObject.createObject()与JavaScriptObject.createObject()。cast()
- 15. std :: map <MyClass,std :: vector <MyClass>>段错误。奇数
- 16. MyClass(expr)之间的作用域差异;和MyClass myObject(expr);
- 17. Java:将MyClass投射到列表<MyClass>
- 18. MFC dlg类链接错误为MyClass :: GetMessageMap()和MyClass :: GetRuntimeClass(MSVC 2008)
- 19. 为什么`抛出MyClass'不起作用,抛出MyClass()'呢?
- 20. 我希望std :: shared_ptr可以像MyClass @ ptr = @(new MyClass())一样写入;
- 21. 将MyClass <SomeType>转换为MyClass <SomeOtherType>
- 22. #<MyClass:0x10f6a82d0>和MyClass有什么区别?
- 23. CPP未定义的引用'Myclass :: Myclass()'使用代码块
- 24. 泛型:T扩展MyClass与T扩展MyClass <T>
- 25. 是 '进口MyClass.MyClass' 是 '从MyClass的MyClass的进口' 等于蟒蛇
- 26. 如何解决:错误:从 '常量MyClass的*' 到 'MyClass的*'
- 27. 了解MyClass x(y);其中y是类型MyClass的
- 28. 为什么MyClass .__ class__返回的值不是MyClass().__ class__?
- 29. var t:MyClass = MyClass(o);有什么区别?和var t:MyClass = o as MyClass;
- 30. 是否可以重写MyClass *(不是MyClass)的析构函数?
首先是复制初始化,其他是默认初始化 – 2012-08-14 11:35:15