programing

0 배열 초기화

copyandpastes 2021. 1. 19. 08:16
반응형

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

반응형