C에서는 BOOL 형으로 참 거짓을 판단했었습니다.
사실 정확하게 이야기 하자면 boolean 참 거짓 판별형이 없고
0은 거짓으로 not 0 는 참으로 인식 했습니다.
하지만 여전히 C++에서도 참의 진정한 의미는 not 0 입니다.
0만 아니면 무조건 참이라는 뜻이죠.
그래서
if (PointerA) // 이는 PointA 클래스포인트가 값을 가지고 있으면.. 즉 객체가 할당되어 있으면이라는 뜻이죠.
PointerA->DrawText("안녕하삼... ㅡ,.ㅡ;");
같은 식이 가능하죠.
C++에서는 참 거짓의 뜻을 보다 명확하게 하기 위해 파스칼에서 많이 쓰이던
Boolean 형을 도입했습니다.
C++에서는 참 거짓의 판별은 bool 형을 쓰는게 옳고
bool을 써야 혹시 모를 에러의 가능성을 없앨 수 있습니다.
가령 MFC 나 API를 쓸때 자주 나오는 BOOL 형은
enum { FALSE, TRUE }; 로
TRUE == 1 이기 때문에 원래의 참의 의미인 0 가 아닌 값과는 차이가 있습니다.
BOOL 이 int 형이기 때문에 1 이외의 값을 얼마든지 가질 수 있기 때문입니다.
typedef int BOOL;
그래서 자칫 다음과 같은 코드는 찾기 힘든 버그를 만들 소지를 안게 됩니다.
BOOL condition;
;
if (condition == TRUE)
;
BOOL은 정수형이기 때문에 condition이 자칫 1외에 다른 정수 값을 가질수도 있으며
이 경우도 논리적으로 true 이나 위의 if (condition == TRUE) 비교문에는 거짓으로 판단되는
일이 생기기 때문입니다.
그러나 C++에서 도입된 bool 형은 그럴 위험에서 완전히 벗어나 있습니다.
bool 형은 오직 0과 1만 담을 수 있는 1bit 형 이기 때문입니다.
1bit 형이지만 실제로는 1byte의 공간을 차지하게 됩니다.
bool 형은
bool condition;
;
if (condition == true)
;
아무런 문제가 없습니다.
bool 형은 사실 0과 1이라는 숫자이기도 하기 때문에
정수로의 암묵적인 형 변환이 일어납니다.
int no = true;
일때 no 는 1을 가지게 됩니다.
원칙적으로 C++에서는 이경우 static casting 을 해야 합니다.
no = static_cast<int>(true);
이러한 너무 뻔한 것은 굳이 타이핑 노고를 할 필요가 없어 보입니다.
이러한 사실에 기초해서 bool을 정수형과 혼합해서 쓸 때 보다 간편한 코드를 구사할 수 있으며
이는 C++에서는 전적으로 안전합니다.
하지만, 코드의 가독성을 생각한다면 크게 바람직한 것은 아닙니다.
bool bA;
;
int no;
;
no += bA ;
;
어떻게 쓸지는 플머의 몫입니다.
그럼..
|
그 때문에 다음의 코드가 가능했었습니다.
(int_a == int_b) * 5
// 이 값은 int_a와 int_b가 같을 경우에 5를 가집니다.