Program Tip

구조체에서 기본값 초기화

programtip 2020. 12. 9. 21:39
반응형

구조체에서 기본값 초기화


C ++ 구조체의 몇 가지 선택 값만 초기화해야한다면 이것이 맞을까요?

struct foo {
    foo() : a(true), b(true) {}
    bool a;
    bool b;
    bool c;
 } bar;

내가 하나 개를 끝낼 것입니다 가정 정정 있습니까 struct라는 항목 bar요소 bar.a = true, bar.b = true그리고이 정의되지 않은 bar.c?


예. bar.abar.btrue로 설정되어 있지만, bar.c정의되어 있지 않습니다. 그러나 특정 컴파일러는이를 false로 설정합니다.

여기에서 라이브 예제보기 : struct demo

C ++ 표준 섹션 8.5.12에 따르면 :

초기화가 수행되지 않으면 자동 또는 동적 저장 기간이있는 개체의 값이 결정되지 않습니다.

기본 내장 데이터 유형 ( bool , char, wchar_t, short, int, long, float, double, long double)의 경우 전역 변수 (모든 정적 저장소 변수) 만 명시 적으로 초기화되지 않은 경우 기본값 0을 가져옵니다.

undefined bar.c로 시작 하지 않으려면 bar.a및에서 했던 것처럼 초기화해야합니다 bar.b.


생성자를 정의 할 필요조차 없습니다.

struct foo {
    bool a = true;
    bool b = true;
    bool c;
 } bar;

명확히하기 위해, 이것을 중괄호 또는 등호 초기화라고합니다 (등호 대신 중괄호 초기화를 사용할 수도 있기 때문입니다). 이는 집계에만 해당되는 것이 아닙니다. 일반 클래스 정의에서 사용할 수 있습니다. 이것은 C ++ 11에서 추가되었습니다.


다음과 같이 생성자를 사용하여 수행 할 수 있습니다.

struct Date
{
int day;
int month;
int year;

Date()
{
    day=0;
    month=0;
    year=0;
}
};

또는 다음과 같이 :

struct Date
{
int day;
int month;
int year;

Date():day(0),
       month(0),
       year(0){}
};

귀하의 경우 bar.c는 정의되지 않았으며 그 값은 컴파일러에 따라 다릅니다 (a와 b가 true로 설정된 동안).


명시적인 기본 초기화가 도움이 될 수 있습니다.

struct foo {
    bool a {};
    bool b {};
    bool c {};
 } bar;

동작은와 bool a {}동일 bool b = bool();하며 반환 false합니다.

참고 URL : https://stackoverflow.com/questions/16782103/initializing-default-values-in-a-struct

반응형