본문 바로가기

C++21

항목 3 낌새만 보이면 const를 들이대 보자! 이부분은 정말 헷갈리는 부분이다. 우선 이것 부터 보자. char greeting[] = "Hello" char *p = greeting; const char *p = greeting; char * const p = greeting; const char * const p = greeting; 자 각각의 p는 무슨 의미 일까? 우선 첫번째 p는 비상수 포인터, 비상수 데이터이다. const가 전혀 없는 걸로 봐서 한 눈에 알 수 있다. 두번째는 const가 char 앞에 붙어있다. 그래서 이것은 비상수 포인터, 상수 데이터이다. 세번째는 살짝 이해가 안갈 수 도 있는데 사실 char const* p와 동일한 표현이다. 그래서 상수 포인터, 비상수 데이터이다. 네번째는 딱보면 알겠지만 상수 포인터, 상수 데.. 2024. 1. 17.
항목 2 #define을 쓰려거든 const, enum, inline을 떠올리자. #define으로 선언한 상수는 컴파일 과정중 오류 발생시 정확한 이름을 밝히지 않는다. #define NUMBER 0 int main() { int result = 10 / NUMBER; return 0; } 만약 다음과 같은 코드를 실행 하면 NUMBER가 0이기 때문에 컴파일이 안되고 오류가 발생 할 것이다. 하지만 오류에는 0으로 나눌 수 없다는 메시지만 나오지 NUMBER에 대해서는 언급 되지 않는다. 그 이유는 컴파일시에 전처리단계에서 NUMBER는 모두 0으로 치환되기 때문이다. 그래서 우리는 0이 무엇인지 일일이 찾아다녀야 하는 불편함이 있다. 이때 만약 const를 이용하여 상수로 선언을 하였다면 기호 테이블에 입력되어 오류에도 0으로 표시되는것이 아니라 상수 명으로 잘 나올 것이다. 다.. 2024. 1. 17.
Effective C++ 스타트 Effective C++은 많은 개발자들 사이에서 성경과 같은 존재로 여겨지며 읽히고 읽는책입니다. 그래서 저도 Effective C++을 읽으며 평소에 제가 C++을 얼마나 이상하게 쓰고 있었는지 반성하는 시간을 가져볼까 합니다. 이 글을 쓰는 시점에서 이미 절반 정도는 읽었는데 여러모로 충격적인 부분도 꽤 있었습니다. Effective C++을 통해 한 층더 C++전문가로 다가가 봅시다. 2024. 1. 17.