'bool'은 C ++의 기본 데이터 유형입니까?
코드를 작성하는 동안이 의심이 생겼습니다. 'bool'은 C ++ 표준에 정의 된 기본 데이터 유형입니까, 아니면 컴파일러에서 제공하는 일종의 확장입니까? Win32에는 long typedef에 불과한 'BOOL'이 있기 때문에이 의심을 받았습니다. 또한 이렇게하면 어떻게 되나요?
int i = true;
변수 i가 값 1을 가질 것이라는 것이 "항상"보장됩니까, 아니면 다시 사용중인 컴파일러에 따라 달라지는가? 또한 BOOL을 매개 변수로 허용하는 일부 Win32 API의 경우 bool 변수를 전달하면 어떻게됩니까?
bool은 C ++의 기본 데이터 유형입니다. 변환 true
1을 수득한다 정수형로 변환하고 false
0 (4.5 / 4, 4.7 / 4)을 수득한다. C에서는 C99까지 bool 데이터 유형이 없었고 사람들은
enum bool {
false, true
};
Windows API도 마찬가지입니다. C99부터는 _Bool
기본 데이터 유형이 있습니다. 포함 stdbool.h
됩니다
해당 형식 정의
#define
에 그 bool
와 상수를 제공 true
하고 false
. 기존 코드와의 호환성 문제로 인해 bool을 기본 데이터 유형 (및 키워드)으로 만들지 않았습니다.
예, bool은 내장형입니다.
WIN32는 C ++가 아닌 C 코드이며 C에는 bool이 없으므로 자체 typedef BOOL을 제공합니다.
이 유형의 변수가있는 경우입니다 - C ++는 자동 캐스팅을 많이 수행 bool
하고 기대 뭔가에 전달은 int
, 그것이로를 만들 것입니다 int
당신을 위해 - 0
위해 false
및 1
위해 true
.
이것이 보장되는지 확인하기 위해 내 표준이 없지만 내가 사용한 모든 컴파일러가 이것을 수행합니다 (따라서 항상 작동한다고 가정 할 수 있습니다).
그러나이 변환에 의존하는 것은 나쁜 생각입니다. int
서명 을 오버로드하는 새 메서드가 추가되면 코드 컴파일이 중지 될 수 있습니다 .
네, 1993 년에 소개되었습니다.
추가 참조 : 부울 데이터 유형
C는 어셈블리 언어보다 한 단계 위 단계를 의미합니다. C if 문은 실제로 "branch-if-zero"에 대한 구문 적 설탕이므로, 부울을 독립적 인 데이터 유형으로 생각하는 것은 당시 외국 개념이었습니다. (1)
지금도 C / C ++ 부울은 일반적으로 단일 바이트 데이터 유형의 별칭에 불과합니다. 따라서 독립적 인 데이터 유형 이라기보다는 목적을위한 레이블에 가깝습니다.
(1) 물론 현대 컴파일러는 if 문을 처리하는 데있어 좀 더 발전했습니다. 이것은 새로운 언어로서의 C의 관점에서 볼 수 있습니다.
Turbo C 및 C ++ 컴파일러는 boolean (bool 키워드) 데이터 유형을 지원하지 않지만 dev C ++ 컴파일러는 boolean (bool 키워드) 데이터 유형을 지원합니다.
이제는 네이티브 유형이지만 여전히 리터럴 false
이 0이고 true
1 인 정수 (내 생각에는)로 정의되어 있습니다 . 그러나 모든 논리는 여전히 0이 아닌 것은 사실로 간주하므로 엄밀히 말하면 진정한 리터럴은 다음과 같습니다. 아마도 컴파일러가 무언가가 거짓이 아닌지 테스트하기위한 키워드 일 것입니다.
if(someval == true){
아마도 다음과 같이 번역됩니다.
if(someval !== false){ // e.g. someval !== 0
컴파일러에 의해
참조 URL : https://stackoverflow.com/questions/356726/is-bool-a-basic-datatype-in-c
'IT story' 카테고리의 다른 글
클래스에는 몇 개의 생성자가 있습니까? (0) | 2020.12.25 |
---|---|
Android의 Moshi 대 Gson (0) | 2020.12.25 |
asp.net mvc에서 날짜 시간 값을 URI 매개 변수로 어떻게 전달합니까? (0) | 2020.12.25 |
Postgres를 사용하여 테이블의 두 번째 또는 세 번째 열 뒤에 테이블에 새 열을 추가하는 방법은 무엇입니까? (0) | 2020.12.25 |
ANSI JOIN과 non-ANSI JOIN 쿼리가 다르게 수행됩니까? (0) | 2020.12.25 |