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
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
모두 첫 번째 값과 같은 값입니까?
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.b
및ss.c
초기화 0]
하지만 그렇게하지 않았다면 : float miniTime [7] = {FLT_MAX, FLT_MAX} 나머지 5는 0이 될까요? 요소 중 하나만 설정하면 모두 같거나 같아야합니까? – doubter
기술적으로 나머지 요소는 0으로 초기화되지 않고 값으로 초기화됩니다. 수레에 대한 차이점은 없습니다 :) –
@Armen : 예! 표준에서 관련 텍스트를 추가했습니다. –
아니요, 첫 번째 값만 제공된 값으로 초기화되고 다른 값은 표준에 따라 초기화 된 값입니다.
표준에 따라 기본값으로 초기화되지 않고 값이 초기화됩니다. 부동 소수점을 포함하여 POD 유형에 대한 차이점은 없습니다 –
링크 된 페이지에 "... 지정되지 않은 요소가 0으로 설정되었습니다."라는 메시지가 표시됩니다.
정확합니다. 따라서 배열의 첫 번째 요소 만 FLT_MAX
으로 지정되고 나머지는 0으로 초기화됩니다. 같은 값으로 모두 설정하려면 좀 더 간결을위한 - 루프 A를 사용하거나 할 수 있습니다 경고로
std::fill_n(minTime, 7, FLT_MAX);
, C++ 하드 언어입니다. 이것은 많은 사람들이 많은 잘못된 정보를 가지고 있음을 의미하며 특히 인터넷에서 쉽게 찾을 수 있습니다.
book on our list에서 학습하는 것이 좋습니다. 귀하의 링크에서
(! 그리고 네, 우리의 목록에없는 사람 들이 너무 잘못된 정보를 포함하기 때문에 이렇게됩니다) : 누락 된 초기화 값은 명시 적으로 배열 크기가 지정되면 제로 사용하지만, 짧은 initiliazation 목록을 지정, 지정되지 않은 요소는 0으로 설정됩니다. – Erik