구조체에서 기본값 초기화
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.a
및 bar.b
true로 설정되어 있지만, 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
'Program Tip' 카테고리의 다른 글
5 분마다 URL 주소를 실행하는 CRON 명령 (0) | 2020.12.09 |
---|---|
C ++ 14에 도입 된 어떤 변경으로 인해 C ++ 11로 작성된 프로그램이 잠재적으로 중단 될 수 있습니까? (0) | 2020.12.09 |
AppCompatActivity 기호를 해결할 수 없음-지원 v7 라이브러리가 인식되지 않습니까? (0) | 2020.12.09 |
AVAudioPlayer가 소리를 재생하지 않음 (0) | 2020.12.09 |
원격 서버에서 Amazon EC2의 mysql에 연결 (0) | 2020.12.09 |