2009-10-16 133 views
2
const size_t size = 5; 
int *i = new int[size](); 

for (int* k = i; k != i + size; ++k)            

{                    
cout << *k << endl;           

}   

儘管我已經值通過使用()操作者初始化動態數組元素,輸出I得到的是C++初始化動態數組元素

135368 
0 
0 
0 
0 

不知道爲什麼在第一個數組元素被初始化到135368.

有什麼想法?

+3

我認爲這是一個編譯器錯誤。有些編譯器似乎在初始化時遇到了一些問題:http://www.boost.org/doc/libs/1_40_0/libs/utility/value_init.htm – 2009-10-16 18:01:09

+0

使用'new []'對數組進行值初始化甚至是格式良好?我在標準中找不到任何東西(建議參見§5.3.4)。 – 2009-10-16 18:06:14

+1

'new-type-id'不能是語法上的函數類型。這樣,'T [N]()'不是一個函數數組,而是一個數組值初始化的(所以'5.3.4/15'適用)。 – 2009-10-16 18:09:21

回答

6

我的第一個想法是:「 ...只是說!」

你有沒有真正的,真正的,令人難以置信的好理由不使用向量?

std::vector<int> i(5, 0); 

編輯:當然,如果你想讓它初始化爲零,即會在默認情況下發生......

EDIT2:如前所述,你要問的是值初始化 - 但在C++ 2003中添加了值初始化,並且對於某些編譯器(特別是較老的編譯器)可能無法正常工作。

+0

我不想在向量和數組之間做出選擇。我正在玩數組並查看它們的行爲。我正在學習C++課程的學習過程: – captonssj 2009-10-16 18:05:39

3

我同意litb的評論。這似乎是一個編譯器錯誤。

把你的代碼在一個main功能,並與前綴:

#include <iostream> 
#include <ostream> 
using std::cout; 
using std::endl; 
using std::size_t; 

我有五個零既GCC 4.1.2,並在Linux變種一個gcc 4.4.0。

編輯:

只是因爲它是與陣列型稍微異常:在新的表達式的()的初始化意味着該動態分配的對象(一個或多個)是值初始化。即使使用數組new[...]表達式,這也完全合法。除了一對空括號作爲數組new表達式的初始值設定項外,其他任何內容都是無效的,但對於非數組new表達式而言,非空初始化程序通用。

+0

和MinGW GCC 3.4.5我得到了5個垃圾數。 – 2009-10-17 03:58:27