2011-03-13 123 views
1
float minTime[7]={FLT_MAX}; 
    for(int i=0;i<7;i++) 
     cout << "Min: " << minTime[i] << endl; 

为什么我得到以下输出:C++数组初始化

Min: 3.40282e+038 
Min: 0 
Min: 0 
Min: 0 
... 

Shoudln't都具有相同的值作为第一个?因为它在这里被引用: C++ Notes

+1

从你的链接:缺少初始值使用零 如果指定了明确的数组的大小,而是指定了一个短initiliazation名单,未指定的元素被设置为零。 – Erik 2011-03-13 17:21:09

回答

3

没有所有人都有与第一个相同的价值吗?

没有!当数组部分初始化时,未初始化的数组元素将被初始化(零初始化,在这种情况下为)。

C++ 03第8.5.1节/ 7

如果在列表中更少的初始化值多于部件在总体上,则每个部件不明确初始化应值初始化 (8.5)。
[实施例:

struct S { int a; char* b; int c; }; 
S ss = { 1, "asdf" }; 

初始化ss.a 1,ss.b用 “ASDF”,和ss.c与表单 INT(的表达式的值),即,0]

+0

但是,这不是如果我这样做: float miniTime [7] = {FLT_MAX,FLT_MAX}和其余5将是0?如果我只设置其中一个元素,应该是相同的,或者不是? – doubter 2011-03-13 17:21:44

+0

从技术上讲,其余的元素都是初始化值,而不是零初始化的。不是说漂浮物有任何区别:) – 2011-03-13 17:24:12

+0

@阿门:是的!添加了标准中的相关文本。 – 2011-03-13 17:26:22

1

不,只有第一个值用提供的值初始化,其他值则按照标准初始化。

+0

按照标准,它们是值初始化的,不是默认初始化的。不是说POD类型有什么区别,包括非常多的漂浮物 – 2011-03-13 17:35:05

4

您的链接页面显示“...未指定的元素设置为零”。

这是正确的;因此,只有阵列中的第一个元素被指定为FLT_MAX,其余元素被初始化为零。如果你想将它们全部设置为相同的值,你可以使用一个for循环,或更简洁:

std::fill_n(minTime, 7, FLT_MAX); 

以示警告,C++是一个很难的语言。这意味着很多人有很多错误信息,这在互联网上很容易找到。你最好从book on our list学习。 (是的,那些我们的名单上没有是如此,因为它们也含有误传!)

+0

thx ......我错误地解释了这个帖子......很多对不起 – doubter 2011-03-13 17:24:28

+1

@doubter:没关系,它会一次又一次地发生在我们所有人身上。 :) – GManNickG 2011-03-13 17:29:48