2011-03-13 5 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 목록을 지정, 지정되지 않은 요소는 0으로 설정됩니다. – Erik

답변

3

모두 첫 번째 값과 같은 값입니까?

Nopes! 배열이 부분적으로 초기화 될 때 초기화되지 않은 배열 요소는 값이 초기화됩니다 (이 경우 0으로 초기화 됨).

C++ 03 8.5.1/7

각 멤버는 명시 적이어야한다 초기화되지 집계에서 회원들이이보다 목록에 적은 이니셜 라이저가있는 경우 값 초기화 (8.5).
[예 :

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

, 즉) 형태 INT (의 식의 값이 "자위대"와 1 ss.a, ss.bss.c 초기화 0]

+0

하지만 그렇게하지 않았다면 : float miniTime [7] = {FLT_MAX, FLT_MAX} 나머지 5는 0이 될까요? 요소 중 하나만 설정하면 모두 같거나 같아야합니까? – doubter

+0

기술적으로 나머지 요소는 0으로 초기화되지 않고 값으로 초기화됩니다. 수레에 대한 차이점은 없습니다 :) –

+0

@Armen : 예! 표준에서 관련 텍스트를 추가했습니다. –

1

아니요, 첫 번째 값만 제공된 값으로 초기화되고 다른 값은 표준에 따라 초기화 된 값입니다.

+0

표준에 따라 기본값으로 초기화되지 않고 값이 초기화됩니다. 부동 소수점을 포함하여 POD 유형에 대한 차이점은 없습니다 –

4

링크 된 페이지에 "... 지정되지 않은 요소가 0으로 설정되었습니다."라는 메시지가 표시됩니다.

정확합니다. 따라서 배열의 첫 번째 요소 만 FLT_MAX으로 지정되고 나머지는 0으로 초기화됩니다. 같은 값으로 모두 설정하려면 좀 더 간결을위한 - 루프 A를 사용하거나 할 수 있습니다 경고로


std::fill_n(minTime, 7, FLT_MAX); 
, C++ 하드 언어입니다. 이것은 많은 사람들이 많은 잘못된 정보를 가지고 있음을 의미하며 특히 인터넷에서 쉽게 찾을 수 있습니다. book on our list에서 학습하는 것이 좋습니다. 귀하의 링크에서

+0

thx ... 게시물을 잘못 해석했습니다 ... 많은 죄송합니다. – doubter

+1

@doubter : 괜찮습니다. 계속해서 우리 모두에게 일어날 것입니다. :) – GManNickG