2013-03-17 77 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

相关问题