블로그
-
C++ 전처리 지시자: 매크로 부작용, #if·#ifdef 조건부 컴파일, -E로 결과 확인
#define 매크로가 인자를 두 번 평가하거나 괄호가 빠져 계산이 틀어지는 부작용을 예제로 보여주고, #if와 #ifdef로 플랫폼별 코드를 나누는 법, 문자열화 연산자, #pragma, 전처리 결과를 -E로 확인하는 방법까지 전처리 지시자를 설명합니다.
-
C++ Proxy 패턴: 가상·보호·캐싱 프록시로 지연 로딩과 접근 제어 구현하기
무거운 객체를 실제로 필요할 때 만드는 가상 프록시, 권한을 확인한 뒤 호출을 넘기는 보호 프록시, 결과를 저장해 두는 캐싱 프록시를 C++로 구현하고, 스마트 포인터와 Copy-on-Write가 프록시의 한 형태인 이유를 데이터베이스 연결 예제로 설명합니다.
-
C++11 random 라이브러리: rand() % n이 편향되는 이유와 mt19937·분포 사용법
rand() % n이 편향되는 이유와 mt19937 엔진에 분포를 조합하는 C++11 random 사용법을 주사위, 셔플, 가중치 랜덤 예제로 보여주고, 호출마다 엔진을 새로 만드는 실수, random_device의 함정, 플랫폼별 분포 결과 차이를 설명합니다.
-
C++20 range adaptor: views::filter·transform 파이프라인의 지연 평가와 댕글링 함정
views::filter와 views::transform을 | 로 이어 붙인 파이프라인이 결과를 즉시 만들지 않고 순회할 때 계산되는 원리를 설명하고, 원본보다 오래 사는 뷰의 댕글링, 조건자 중복 호출, 어댑터 순서에 따른 비용 차이 같은 함정을 예제로 짚습니다.
-
C++20 std::ranges 알고리즘: projection으로 중복 줄이기와 concept 기반 에러
C++20 std::ranges 알고리즘을 다룹니다. std::sort 대비 안전성, projection으로 코드 중복 줄이기, concept 기반 컴파일 에러, subrange 반환까지 실전 예제로 정리합니다.
-
C++20 ranges의 개념 계층: range 요건, input·forward·random_access_range, CPO 설계
begin()과 end()만 있으면 range가 되는 최소 요건부터 input_range, forward_range, random_access_range로 계층이 나뉜 이유, std::ranges::begin이 평범한 함수가 아닌 커스터마이제이션 포인트 객체로 설계된 까닭을 C++20 코드로 설명합니다.
-
C++ std::ratio: 컴파일 타임 분수 연산과 chrono 단위 표현 원리
std::ratio로 분수를 타입에 담아 ratio_add, ratio_multiply 같은 연산과 약분을 컴파일 타임에 끝내는 방법, chrono::duration이 milli와 micro로 단위를 표현하는 원리를 보여주고, 단위 변환과 프레임 레이트 예제, 연산 중 오버플로우 문제를 다룹니다.
-
C++ std::regex 실전: regex_match vs regex_search, 캡처 그룹, 토큰화와 탐욕적 매칭 함정
C++ std::regex로 문자열 검증, URL 파싱, 로그 분석, 치환, 토큰화를 구현하는 방법을 정리합니다. regex_match/search 차이, 캡처 그룹, 이스케이프, 성능, 탐욕적 매칭 함정까지 다룹니다.
-
C++ sregex_iterator·sregex_token_iterator: 모든 매치 순회와 문자열 분할
문자열 안의 모든 정규식 매치를 sregex_iterator로 순회하며 캡처 그룹을 꺼내고, sregex_token_iterator로 구분자 기준 분할을 하는 방법을 단어 추출, URL 파싱, 로그 파싱 예제로 보여줍니다. 임시 문자열 수명, 빈 매치, 성능 함정도 다룹니다.
-
C++ 반환 방식 고르기: 값·레퍼런스·포인터 반환, RVO를 막는 return std::move
함수에서 값, 레퍼런스, 포인터 중 무엇으로 반환할지 정하는 기준과 지역 변수 레퍼런스를 반환해 댕글링이 되는 문제, 일부 경로에서 return이 빠지는 실수, return std::move가 RVO를 막는 이유, pair·tuple·optional로 여러 값을 돌려주는 방법을 설명합니다.