728x90

Application/C++ 8

[C++] 캐스트 이해하기 (4) - dynamic_cast

1. 들어가기static_cast랑 reinterpret_cast, const_cast까지 정리해 놓고 나면마지막으로 자연스럽게 떠오르는 친구가 dynamic_cast다이름만 보면“런타임에 뭔가 확인해 준다는데 정확히 뭐가 다른지”“언제 static_cast 대신 써야 하는지”헷갈릴 때가 많다 이 글에서는dynamic_cast가 정확히 무슨 일을 하는지언제 static_cast보다 dynamic_cast가 더 어울리는지실무에서 자주 보게 되는 패턴과 주의할 점을 한 번에 정리해 본다2. dynamic_cast가 하는 일한 줄로 요약하면런타임에 실제 타입을 확인하면서상속 관계 안에서 안전하게 캐스트해 주는 도구 라고 보면 된다 조금 더 풀어서 말하면다형성 기반 클래스를 가리키는 포인터나 레퍼런스에서실제 객..

Application/C++ 2025.12.11

[C++] 캐스트 이해하기 (3) - const_cast

1. 들어가기static_cast랑 reinterpret_cast까지 정리해 놓고 나면캐스트 시리즈에서 자연스럽게 다음으로 떠오르는 친구가 const_cast다이름만 보면“const를 없애 버리는 무서운 캐스트인가…” 싶은데실제로는잘 쓰면 레거시 코드와 최신 코드를 이어 주는 어댑터 역할도 하고잘못 쓰면 설계 전체를 꼬이게 만드는 양날의 검 같은 존재에 가깝다 이번 글에서는const_cast가 정확히 무슨 일을 하는지실무에서 실제로 어디쯤에서 등장하는지절대 쓰면 안 되는 패턴은 뭐가 있는지를 정리해 본다2. const_cast가 하는 일한 줄로 요약하면타입의 const / volatile 수식자를 붙이거나 떼어 내는 캐스트 라고 보면 된다 조금 더 풀어서 말하면포인터나 레퍼런스 타입에서const / vo..

Application/C++ 2025.12.10

[C++] 캐스트 이해하기 (2) - reinterpret_cast

1. 들어가기C 스타일 캐스트를 오래 쓰다 보면어느 순간부터 reinterpret_cast라는 친구가 눈에 들어온다이름부터 뭔가 살벌한 느낌이라검색해 보면 하나같이 위험하다고만 하고정작 언젠 쓰는지 감이 잘 안 올 때가 많다이 글에서는reinterpret_cast가 정확히 어떤 캐스트인지실제로 어떤 상황에서 쓰는지왜 조심해서 써야 하는지를 정리해 본다2. reinterpret_cast가 하는 일한 줄로 요약하면메모리의 비트 패턴을 그대로 둔 채다른 타입으로 다시 읽게 만드는 캐스트 라고 할 수 있다 다른 캐스트와 비교하면 느낌이 좀 다르다static_cast타입이 논리적으로 맞는지 컴파일러가 최대한 체크dynamic_cast런타임까지 끌고 가서 타입을 확인reinterpret_cast비트만 맞으면 어떻게..

Application/C++ 2025.12.09

[C++] 캐스트 이해하기 (1) - static_cast

1. 들어가기C++로 개발하다 보면 가장 자주 보는 캐스트가 static_cast다그런데 막상 “언제 정확히 써야 하는지”를 설명해 보라고 하면대충 “타입 맞을 때 쓰는 거” 정도로 흐리게 넘어갈 때가 많다이 글에서는static_cast가 정확히 어떤 캐스트인지C 스타일 캐스트와 뭐가 다른지실무 코드에서 자주 쓰는 패턴을 정리해 본다2. static_cast가 하는 일한 줄로 요약하면컴파일러가 타당하다고 판단할 수 있는 범위 안에서타입 변환을 수행하는 캐스트 주로 이런 상황에서 사용된다정수 ↔ 실수 변환int → double, double → int상속 관계에서 업캐스트Derived* → Base*void* → 구체적인 포인터 타입enum ↔ 정수형 변환static_cast는 논리적으로 말이 되는 변환만..

Application/C++ 2025.12.08

[C++] enum 중복 값 쓰기

아래와 같이 코드를 작성하면 다른 enum의 변수값인데도 같은 변수명이라는 이유로 컴파일에서 에러를 발생시킨다 #include enum Index { _111, _222, _333, _444, MAX }; enum Index1 { _111, _222, _333, _444, MAX }; int main(int argc, char **argv) { return 0; } 이런 에러를 우회하는 방법으로는 namespace를 쓰는 방법이 있다 #include namespace Type_A { enum Index { _111, _222, _333, _444, MAX }; } namespace Type_B { enum Index { _111, _222, _333, _444, MAX }; } int main(int a..

Application/C++ 2022.12.22

[C++] 정렬 되는 연결 리스트(링크드 리스트) 만들기

학번과 성적을 입력받으면 학번에 따라서 자동 정렬되는 연결 리스트 (링크드 리스트) 예제 코드 #include #include #include #define LEN sizeof(struct Student) struct Student { int num; float score; struct Student *next; }; int n = 0; void print(struct Student * head); struct Student * insert(struct Student * head, struct Student * stud) { if(head == NULL) { head = stud; } else { struct Student *temp; if(head->num > stud->num) { temp = hea..

Application/C++ 2022.12.15
728x90
반응형