回答
的首先調用複製構造,與臨時對象作爲參數 - 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. MyClass obj = MyClass(); 'MyClass()'在這裏引用臨時對象嗎?
- 2. &PHP中的新MyClass()vs new MyClass()
- 3. C#列表<MyClass>應從MyClass的
- 4. 無法轉換MyClass的*爲const MyClass的
- 5. 無法將'MyClass'轉換爲'MyClass'
- 6. Dim c as MyClass&Dim c as New MyClass
- 7. 在C++中聲明指針會更好嗎? MyClass * ptr(或)MyClass * ptr?
- 8. VB.Net中的MyClass
- 9. 爲什麼MyClass .__ class__返回的值不是MyClass().__ class__?
- 10. 是 '進口MyClass.MyClass' 是 '從MyClass的MyClass的進口' 等於蟒蛇
- 11. MFC dlg類鏈接錯誤爲MyClass :: GetMessageMap()和MyClass :: GetRuntimeClass(MSVC 2008)
- 12. MyClass :: class - 獲取MyClass的字符串表示形式
- 13. 將MyClass <SomeType>轉換爲MyClass <SomeOtherType>
- 14. var t:MyClass = MyClass(o);有什麼區別?和var t:MyClass = o as MyClass;
- 15. #<MyClass:0x10f6a82d0>和MyClass有什麼區別?
- 16. 我希望std :: shared_ptr可以像MyClass @ ptr = @(new MyClass())一樣寫入;
- 17. 如何解決:錯誤:從 '常量MyClass的*' 到 'MyClass的*'
- 18. Java:將MyClass投射到列表<MyClass>
- 19. unordered_map <(int或string),MyClass>如何訪問和打印MyClass的元素
- 20. .next(「。myClass」)不工作jquery
- 21. Binding ObservableCollection <MyClass> to TreeView
- 22. Differnace和 「P->〜MyClass的()」
- 23. 重複符號_OBJC_METACLASS _ $ _ myClass
- 24. 使用myclass :: operator [](int i)
- 25. 重寫的ToString()<MyClass>
- 26. 類型不匹配:無法將MyClass <E>轉換爲MyClass <E>
- 27. 是否有可能有指針unordered_set <MyClass>爲myClass的一部分?
- 28. AS3 - 什麼是MyClass的(實例)和(實例作爲MyClass的)之間的差別
- 29. 在C#中,我爲MYClass命名空間時,爲什麼還需要前綴MYClass?
- 30. 獲取ArrayList <MyClass> getIntent()。getExtras()
首先是複製初始化,其他是默認初始化 – 2012-08-14 11:35:15