我在初始化指针数组时遇到了麻烦。我发现用gcc c ++(4.6.0)编译的是:
MyClass** a = new MyClass*[100];
并不总是初始化指针数组。 (大多数时候它确实给了我一系列无效的迷你指针)
MyClass** a = new MyClass*[100]();
将数组中的所有指针初始化为0(空指针)。
我写的代码意味着可以在Windows / Linux / Mac / BSD平台上移植。这是gcc c ++编译器的一个特殊功能吗?还是标准的C ++?它在标准中的位置是这样说的吗?
答案 0 :(得分:5)
此值初始化是标准C ++。
相关标准是C ++ 98和C ++03§5.3.4/ 15。在C ++ 98中,它是默认初始化,在C ++ 03中,后来是值初始化。对于你的指针,它们都会减少为零初始化。
C ++03§5.3.4/ 15:
- 如果 new-initializer 的格式为
()
,则该项目已初始化值(8.5);
在C ++ 0x中,该段代替引用“直接初始化8.5的初始化规则”,其中在N3290(FDIS)中,您可以在§8.5/ 16中找到相同的措辞。
干杯&第h。,