const size_t size = 5;
int *i = new int[size]();
for (int* k = i; k != i + size; ++k)
{
cout << *k << endl;
}
即使我使用()运算符初始化动态数组元素的值,我得到的输出是
135368
0
0
0
0
不确定为什么第一个数组元素被初始化为135368。
有什么想法吗?
答案 0 :(得分:6)
我的第一个想法是:“不 ......只说否!”
你是否有一些真正,真实,令人难以置信的好理由不使用矢量?
std::vector<int> i(5, 0);
编辑:当然,如果你想将它初始化为零,默认情况下会发生这种情况......
Edit2:如前所述,你要求的是值初始化 - 但是在C ++ 2003中添加了值初始化,并且对于某些编译器(尤其是旧编译器)可能无法正常工作。
答案 1 :(得分:3)
我同意litb的评论。它似乎是一个编译器错误。
将您的代码放在main
函数中,并以:
#include <iostream>
#include <ostream>
using std::cout;
using std::endl;
using std::size_t;
我在linux变体上使用gcc 4.1.2和gcc 4.4.0得到了五个零。
修改强>
仅因为数组类型略有异常:在新表达式中,初始化程序()
表示动态分配的对象值已初始化。即使使用数组new[...]
表达式,这也是完全合法的。除了一对空括号作为数组new
表达式的初始值设定项之外,其他任何内容都无效,尽管非空初始值设定项对于非数组new
epxressions是常见的。