블로그
-
C++20 range adaptor: views::filter·transform 파이프라인의 지연 평가와 댕글링 함정
views::filter와 views::transform을 | 로 이어 붙인 파이프라인이 결과를 즉시 만들지 않고 순회할 때 계산되는 원리를 설명하고, 원본보다 오래 사는 뷰의 댕글링, 조건자 중복 호출, 어댑터 순서에 따른 비용 차이 같은 함정을 예제로 짚습니다.
-
C++ std::regex 실전: regex_match vs regex_search, 캡처 그룹, 토큰화와 탐욕적 매칭 함정
C++ std::regex로 문자열 검증, URL 파싱, 로그 분석, 치환, 토큰화를 구현하는 방법을 정리합니다. regex_match/search 차이, 캡처 그룹, 이스케이프, 성능, 탐욕적 매칭 함정까지 다룹니다.
-
C++ ODR(단일 정의 규칙): 헤더 정의 링크 에러, inline·템플릿 예외, 링커가 못 잡는 위반
변수와 함수는 프로그램 전체에서 정의가 하나여야 한다는 ODR을 기준으로, 헤더에 함수를 정의해 생기는 링크 에러와 inline, 템플릿, constexpr 변수가 예외가 되는 이유, 번역 단위마다 정의가 달라 링커가 못 잡는 위반을 nm으로 확인하는 방법을 설명합니다.
-
std::optional로 '값 없음' 표현하기: value_or, C++23 and_then·transform, 에러 처리 패턴
조회 실패나 파싱 실패처럼 값이 없을 수 있는 결과를 널 포인터나 -1 대신 std::optional로 표현하는 방법을 DB 조회, 설정 파싱, 캐시 예제로 보여주고, value_or와 C++23 and_then, transform, or_else로 검사 코드를 줄이는 법을 설명합니다.
-
C++ noexcept 지정자: 이동 생성자·swap·소멸자에 붙이는 이유와 위반 시 terminate
C++ noexcept 지정자로 함수가 예외를 던지지 않음을 명세하는 방법을 이동 생성자, swap, 소멸자, vector 최적화 예제로 정리합니다. 조건부 noexcept, noexcept 연산자, 위반 시 std::terminate 함정까지 다룹니다.
-
C++ 객체 수명과 저장 기간: 생성·소멸 순서, 임시 객체 수명, 댕글링 참조
C++ 객체 수명(lifetime)과 저장 기간(자동/정적/동적/스레드)의 차이, 생성·소멸 순서 규칙을 실전 예제로 정리합니다. 댕글링 참조·정적 초기화 순서 대란·임시 객체 수명 함정과 RAII·스마트 포인터 해법까지 다룹니다.
-
C++ make_unique·make_shared: new보다 나은 이유와 make 함수를 쓰면 안 되는 경우
make_unique와 make_shared가 new보다 예외에 안전한 이유, make_shared가 객체와 제어 블록을 한 번에 할당해서 얻는 이점과 weak_ptr이 남아 있을 때 메모리가 늦게 해제되는 단점, 커스텀 삭제자나 private 생성자처럼 make 함수를 쓸 수 없는 경우를 설명합니다.
-
C++ inline namespace로 API 버전 관리하기: 기본 버전 전환과 ABI 불일치 검출
inline namespace로 v1, v2 같은 API 버전을 나누면서 기본 버전을 바꿔도 사용자 코드는 그대로 두는 방법, 네임스페이스 이름이 링커 심볼에 들어가 ABI 불일치를 링크 단계에서 드러내는 원리, ADL과 특수화에서 주의할 점을 다룹니다.
-
C++14 초기화 캡처: move 캡처와 unique_ptr을 람다에 넘기는 패턴
C++14부터 람다의 캡처 목록에 이름 = 표현식 형태를 쓸 수 있습니다. 이를 초기화 캡처(init-capture)라고 부릅니다. 클로저 객체 안에 지정한 이름의 멤버를 만들고, 오른쪽 표현식의 결과로 초기화합니다.
-
C++ 전방 선언: 헤더 의존성 줄이기, 불완전 타입의 제약, Pimpl 소멸자 위치
class A; 한 줄로 헤더 의존성을 끊어 순환 include를 풀고 재컴파일 범위를 줄이는 전방 선언의 원리를 설명합니다. 불완전 타입으로는 포인터와 참조만 쓸 수 있는 이유와 unique_ptr, Pimpl 패턴에서 소멸자 위치를 조심해야 하는 이유도 다룹니다.