블로그
-
C++ 전방 선언: 헤더 의존성 줄이기, 불완전 타입의 제약, Pimpl 소멸자 위치
class A; 한 줄로 헤더 의존성을 끊어 순환 include를 풀고 재컴파일 범위를 줄이는 전방 선언의 원리를 설명합니다. 불완전 타입으로는 포인터와 참조만 쓸 수 있는 이유와 unique_ptr, Pimpl 패턴에서 소멸자 위치를 조심해야 하는 이유도 다룹니다.
-
C++ friend: private 접근을 열어 줄 때, operator<<와 대칭 연산자, getter와 비교
friend는 특정 함수나 클래스에만 private 멤버 접근을 허용합니다. operator<< 같은 스트림 연산자와 대칭 비교 연산자를 friend로 만드는 이유, friend가 상속되지 않는다는 규칙, getter를 늘리는 것과 비교한 판단 기준을 예제로 설명합니다.
-
C++ 함수 객체(펑터): 상태를 가진 호출 객체, STL 알고리즘 활용, 람다와의 차이
operator()를 오버로드한 함수 객체가 호출 사이에 상태를 유지하는 방법과 STL 알고리즘에서 쓰는 법을 설명하고, operator()의 const 누락, const를 지키면서 상태를 바꿔야 할 때의 mutable, 큰 펑터의 복사 비용을 std::ref로 줄이는 법을 예제로 다룹니다.
-
C++ 함수 오버로딩: 오버로드 해석 순서와 모호한 호출이 생기는 경우
같은 이름의 함수 중 어떤 것이 호출될지 컴파일러가 정하는 오버로드 해석 순서를 설명하고, 반환 타입만 다른 오버로딩이 불가능한 이유, const 오버로딩, 기본 인자 때문에 생기는 모호한 호출, 배열이 포인터로 바뀌는 함정을 예제로 풀어 봅니다.
-
C++ GUI | Qt 프레임워크: 위젯부터 MOC·시그널/슬롯·이벤트 루프·Graphics View까지
Qt Widgets 기초 예제(버튼, 레이아웃, 메뉴, 텍스트 에디터)와 함께 MOC가 하는 일, 시그널/슬롯 연결 타입, 이벤트 루프, Graphics View, 부모-자식 소유권과 스레드 친화성을 정리하고, vtable 링크 에러나 Cannot queue arguments 같은 실제 오류의 원인을 설명합니다.
-
C++ 헤더 파일 작성법: 선언과 정의 분리, 인클루드 가드, ODR 위반과 순환 include
무엇을 헤더에 두고 무엇을 .cpp에 둘지 선언과 정의의 차이로 정리하고, 인클루드 가드와 pragma once로 중복 포함을 막는 법, 헤더에 함수를 정의해 생기는 ODR 위반, 순환 인클루드, 불필요한 인클루드를 줄이는 방법을 예제로 설명합니다.
-
#ifndef vs #pragma once: C++ 헤더 가드의 동작 원리와 선택 기준
#ifndef 가드와 #pragma once가 전처리기에서 각각 어떻게 중복 포함을 막는지 비교하고, 가드 매크로 이름 충돌, 같은 파일을 가리키는 여러 경로에서 pragma once가 헷갈리는 경우, 순환 포함 문제와 C++20 모듈과의 관계를 설명합니다.
-
C++23 std::expected: 예외 없이 에러 전달하기와 and_then 체이닝
C++23 std::expected로 값과 에러를 하나의 반환 타입에 담아, 예외 없이도 실패 이유를 호출자에게 전달하는 방법을 파일 읽기와 파이프라인 예제로 보여줍니다. and_then 체이닝, expected<void, E>, 예외와의 선택 기준도 다룹니다.
-
C++ explicit 키워드: 암시적 변환 막기, explicit operator bool, C++20 explicit(bool)
explicit를 붙이면 복사 초기화와 함수 인자에서 일어나던 암시적 변환이 막힙니다. 생성자와 변환 연산자, explicit operator bool, C++20 조건부 explicit(bool)의 동작을 비교하고, 스마트 포인터와 단위 타입에서 explicit를 쓰는 패턴을 정리합니다.
-
C++ Expression Templates: 벡터 연산의 임시 객체를 없애는 지연 평가 구현
a + b + c 같은 벡터 연산이 매 단계 임시 객체를 만드는 문제를 Expression Templates로 풀어, 연산을 식 트리로 쌓아 두었다가 대입 시점에 한 번의 루프로 평가하는 방법을 구현합니다. auto로 받았을 때의 댕글링과 앨리어싱 함정도 짚습니다.