2013-03-17 76 views
6

以下兩個初始化有什麼區別?使用和不使用圓括號的C++類初始化

class Pod { 
public: 
    int a, b; 
}; 

Pod *p1 = new Pod; 
Pod *p2 = new Pod(); 
+0

正如JamesMcLaughlin所說,沒有什麼區別,並且不僅限於POD。 – MFH 2013-03-17 02:16:42

+0

@DavidRodríguez-dribeas如何? – 2013-03-17 02:17:27

+0

@JamesMcLaughlin:閱讀標準中的第8.5節:) – 2013-03-17 02:18:02

回答

8

在第一種情況的目的是左未初始化,而在第二種情況下,對象被保證是值初始化,這意味着在這種情況下爲類型是POD 零初始化

+1

雖然區別在於在「int」情況下基本不存在,在第一種情況下,成員是默認初始化的而不是未初始化的。 – 2013-03-17 02:22:47

+0

@JerryCoffin:是的,我應該更清楚,這部分也是由於它是一個POD,因爲它*默認初始化*意味着該對象*保持未初始化* – 2013-03-17 02:39:04

+1

@DavidRodríguez-dribeas:...但在C++ 11中,它不限於POD類型(IIRC,它應該適用於所有可複製類型的更廣泛的類別)。 – 2013-03-17 02:57:14

相關問題