멈추지 않고 끈질기게
[C++][메모] 옛날 문법 정리 본문
※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.
※ 해당 포스팅은 하기 출처들을 참조하였습니다.
- https://stackoverflow.com/questions/6420526/what-is-the-difference-between-bool-and-bool
- https://blog.naver.com/ljy9378/221515469583
1. BOOL vs bool
- BOOL은 windef.h에 선언된 typedef이며, 실제 자료형은 int(4바이트)
- 같이 사용되는 TRUE, FALSE도 마찬가지로 매크로이며, 단순히 1과 0을 의미함
- 이유는 기존의 C언어에 boolean 자료형이 없었기 때문에, int형으로 대체하되 매크로로 명시한 것
- 실제 자료형이 int이기 때문에 0과 1 외의 값도 넣을 수 있으며, 여러모로 boolean보다 불안정
- 다만 기존에 작성된 코드에서 많이 보이기 때문에, 차이점만 숙지하면 될 듯
2. NULL vs nullptr
- NULL도 마찬가지로 vcruntime.h에 작성된 매크로로, 단순히 0을 의미함
- 보통 nullptr과 비슷한 용도로 사용되지만, 값이 정수형이다 보니 int 등의 자료형으로 받는 것도 가능함
#include <iostream>
int main()
{
int* ptrTest = NULL;
int nTest{};
if (nTest == NULL)
std::cout << "int값이 NULL 입니다.\n";
}
- nullptr의 경우 nullptr_t라는 별도의 구조체로, 포인터 외의 변수와 할당, 비교 등의 동작은 컴파일 오류를 발생시킴
- BOOL과 마찬가지로 포인터가 유효한지를 검사하는 데에는 nullptr이 더 안전하나,
기존 코드에서 많이 사용되긴 하니 일단 차이점만 숙지하자
3. enum vs enum class
- 둘 다 열거형을 표현하는 키워드로, C++ 11에서 enum class가 추가 도입됨
- 기존의 enum은 내부 변수들이 전역형(구조체와 비슷)
ex) COLOR라는 열거형 안에 RED라는 값이 있다면, 다른 곳에서 그냥 RED로 사용할 수 있음
- enum class의 경우 이름에 맞게 클래스처럼 내부 값들을 캡슐화함
ex) COLOR라는 열거형 안에 BLUE라는 값이 있다면, COLOR::BLUE로 사용해야함
#include <iostream>
enum COLOR
{
RED = 10
};
enum class COLOR_C {
BLUE = 20
};
int main()
{
// 그냥 RED로 사용 가능
std::cout << "RED의 값은 " << RED << " 입니다.\n";
// 그냥 BLUE로 작성 시 컴파일 에러
std::cout << "BLUE의 값은 " << (int)COLOR_C::BLUE << " 입니다.\n";
}
- enum의 변수는 바로 정수형 변수로 받아 사용 가능
ex) int nTest = RED;
- enum class의 값은 해당 enum class 타입으로만 받을 수 있음(물론 변환은 가능)
ex) int nTest = COLOR_C::BLUE; // 컴파일 에러
#include <iostream>
enum COLOR
{
RED = 10
};
enum class COLOR_C {
BLUE = 20
};
int main()
{
int nTest_1 = RED;
COLOR colorTest_1 = RED;
int nTest_2 = COLOR_C::BLUE; // 컴파일 에러
COLOR_C colorTest_2 = COLOR_C::BLUE;
int nTest_3 = static_cast<int>(COLOR_C::BLUE);
}
- 또한 enum class는 캡슐화하기 때문에 같은 밸류 이름이 겹쳐도 괜찮지만,
enum의 경우 같은 이름이 겹치면 빌드 시 에러가 발생함
- 현재는 enum class가 좀 더 권장되는 느낌으로 보이나,
이전 코드에서 많이 사용되기도 했으니 차이점만 인지하고 가자
'C++' 카테고리의 다른 글
[C++][메모용] reserve() vs resize() / 시간 측정(std::chrono) (0) | 2024.10.17 |
---|---|
[C++][메모용] map 관련 정리 (0) | 2024.08.01 |
[C++] std::endl vs "\n" (2) | 2024.07.23 |
[C++] 람다 표현식(lambda expression) (0) | 2023.12.05 |
[C++] 스마트 포인터(Smart Pointer) (0) | 2023.11.23 |