Visual c++ 如何正确地将数组的值初始化为零?
我在VC++2010中有以下代码:Visual c++ 如何正确地将数组的值初始化为零?,visual-c++,Visual C++,我在VC++2010中有以下代码: PWCHAR pszErrorMessage = new WCHAR[100]; 此代码初始化指向数组的字符指针。但是数组中的值是垃圾。我想要一种将值设置为零的方法。 将上面的值更改为下面的值会将数组中的所有值设置为零。这也适用于自定义结构的数组 PWCHAR pszErrorMessage = new WCHAR[100](); 这是正确的吗 这对性能有影响吗 这种类型的数组初始化是否是VC++2005的一部分 在内部调用哪个方法将数组中结构的值设置为零
PWCHAR pszErrorMessage = new WCHAR[100];
此代码初始化指向数组的字符指针。但是数组中的值是垃圾。我想要一种将值设置为零的方法。
将上面的值更改为下面的值会将数组中的所有值设置为零。这也适用于自定义结构的数组
PWCHAR pszErrorMessage = new WCHAR[100]();
char
这样的简单类型。例如:
xor eax, eax
mov rcx, QWORD PTR $T86268[rsp]
rep stosb
您的主要问题几乎是一个骗局,但这并没有涵盖您询问的一些实现细节。@JerryCoffin我认为您链接的答案似乎回答了我的主要问题。添加()零是否会初始化这些值。假设VC++ 2010是C++ 2003的一致编译器,VC++ 2010在这方面与C++ 2003一致(但在其他方面则不适用)。每一个现代编译器都将其优化为-----你可以在那里选择不同的编译器,比较<代码> Foo和<代码> Bar < /Cult>拆解。快速测试表明VisualStudio2013也可以做到这一点。因此,这确实应该是分配默认初始化数组的首选方法。@frymode:不,这不应该是执行任何操作的首选方法。绝大多数时间,
std::vector ErrorMessage(100)代码>或只是std::string ErrorMessage
比摆弄原始数组、原始新等更可取。您确定编译器在测试中没有优化零内存吗?对于我来说,以这种方式分配数组并访问其所有元素显示在反汇编窗口中(VS 2013)。@frymode:是和否。它没有优化内存的归零。考虑到编译器的差异(我使用的是VC++2010的64位编译器,而您显然使用的是VC++2013的32位编译器),生成代码中的一些差异并不令人惊讶。