0 배열 초기화
스칼라 배열에 대해 누락 된 이니셜 라이저는 기본적으로 0으로 설정된다는 것은 잘 알려져 있습니다.
int A[5]; // Entries remain uninitialized
int B[5]= { 0 }; // All entries set to zero
그러나 이것은 (아래) 보장됩니까?
int C[5]= { }; // All entries set to zero
비어있는 중괄호 초기화는 배열의 집계 초기화를 수행합니다. 이로 인해 int
요소 가 0으로 초기화 됩니다.
네, 보장됩니다.
예, 집계 초기화 규칙에 따라 보장됩니다 (배열의 모든 요소 C
가 값으로 초기화 됨 , 즉 이 경우 0으로 초기화 됨 0
).
(강조 광산)
이니셜 라이저 절의 수가 멤버 수보다 적
and bases (since C++17)
거나 이니셜 라이저 목록이 완전히 비어있는 경우, 나머지 멤버and bases (since C++17)
는by their default initializers, if provided in the class definition, and otherwise (since C++14)
일반적인 목록 초기화 규칙 (비 클래스 유형에 대한 값 초기화를 수행하고 기본 생성자가있는 비 집계 클래스 및 집계에 대한 집계 초기화).
추신:
int A[5]; // Entries remain uninitialized
"초기화되지 않은 상태로 유지"는 정확하지 않을 수 있습니다. 의 경우 int A[5];
의 모든 요소 A
가 기본값으로 초기화 됩니다. 경우 A
정적 또는 스레드 로컬 오브젝트는, 요소가 될 것입니다 제로가 초기화 에 0
그들은 불확정 값이 될 것이다, 그렇지 않으면 아무것도 수행되지 않습니다.
실제로 다음과 같이 말할 때 int A[5] = { 0 };
: 첫 번째 요소를 0으로 초기화하십시오. 집계 초기화로 인해 다른 모든 위치는 0으로 초기화됩니다.
이 줄은 배열이 0으로 가득 차게하는 진짜 책임입니다. int A[5] = { };
그렇기 때문에 사용 int A[5] = { 1 };
하면 첫 번째 위치 만 1로 초기화됩니다.
참조 URL : https://stackoverflow.com/questions/38892455/initializing-an-array-of-zeroes
'programing' 카테고리의 다른 글
Observable 변환 (0) | 2021.01.19 |
---|---|
Elixir Sleep / 1 초 동안 기다립니다 (0) | 2021.01.19 |
Bootstrap 4 : Uncaught ReferenceError : Popper is not defined (0) | 2021.01.19 |
malloc (0)은 무엇을 반환합니까? (0) | 2021.01.18 |
배열에서 짝을 이루지 않은 유일한 요소 찾기 (0) | 2021.01.18 |