2011-03-13 166 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