블로그
-
C++ 람다 심화 | 초기화 캡처·완벽 전달·IIFE·재귀 람다와 실전 패턴
unique_ptr을 스레드로 넘기는 문제에서 출발해초기화 캡처로 소유권을 옮기는 법, 제네릭 람다의 완벽 전달, IIFE로 const 변수를 초기화하는 패턴을 다룹니다. 재귀 람다는 std::function, Y combinator, C++23 deducing this를 비교합니다.
-
C++ map·unordered_map·flat_map: 성능 비교와 선택 기준
std::map(레드-블랙 트리), unordered_map(해시 테이블), C++23 flat_map의 내부 구조 차이가 검색·삽입 성능에 어떻게 드러나는지 비교합니다. lower_bound 범위 검색, 커스텀 키의 해시 함수, operator[]가 원소를 몰래 만드는 문제와 선택 기준을 다룹니다.
-
C++ 파일 입출력: ifstream·ofstream 기초부터 에러 처리, 버퍼링, 원자적 쓰기까지
C++ 파일 입출력 정리. ifstream·ofstream·fstream으로 읽고 쓰기, 에러 처리와 스트림 상태 확인, 버퍼링과 flush, 임시 파일과 rename을 이용한 원자적 쓰기, 한글 경로 처리를 다룹니다.
-
C++ 문자열 다루기: std::string 연산, C 문자열 변환, string_view와 SSO 성능
C++ 문자열 정리. std::string 주요 연산, C 문자열과의 비교와 변환, std::string_view(C++17)의 사용법과 수명 함정, SSO가 성능에 미치는 영향을 예제로 다룹니다.
-
C++ 바이너리 직렬화: 엔디안·구조체 패딩 문제와 버전 관리·체크섬
게임 세이브 파일이 다른 PC에서 깨지는 원인을 엔디안과 구조체 패딩으로 추적하고, string·vector 같은 동적 데이터를 길이와 함께 안전하게 저장하는 방법을 보여줍니다. 포맷 버전 관리, 체크섬, 원자적 쓰기와 백업 같은 운영 패턴도 다룹니다.
-
C++에서 split·join·trim·replace 구현하기: getline·string_view·std::regex 비교
C++ 문자열 알고리즘 정리. split(getline·stringstream·string_view), join(ostringstream), trim(find_first_not_of), replace와 std::regex_replace, 정규식을 한 번 컴파일해 재사용하는 법과 성능 팁을 다룹니다.
-
C++ stringstream | 문자열 파싱·변환·포맷팅
“123abc”를 int로 바꾸다 실패하는 문제에서 시작해 istringstream으로 공백·CSV 데이터를 안전하게 파싱하고 ostringstream으로 문자열을 조립하는 법을 다룹니다. 매니퓰레이터 상태가 다음 출력에 남는 함정, 스트림 재사용 문제, C++20 std::format과의 비교도 포함합니다.
-
C++ auto와 decltype: 타입 추론 규칙, decltype(auto), AAA 스타일
auto가 const와 참조를 떼어내는 규칙, auto&&와 전달 참조, 중괄호 초기화 추론처럼 헷갈리는 타입 추론 규칙을 예제로 확인합니다. decltype이 변수 이름과 표현식에서 다르게 동작하는 이유, decltype(auto)로 참조 반환을 보존하는 법과 AAA 스타일도 다룹니다.
-
C++ 범위 기반 for문과 구조화된 바인딩 | 모던 C++ 반복문
C++11 범위 기반 for와 C++17 구조화된 바인딩 사용법. auto·auto&·const auto&·auto&& 선택, map 순회, 임시 객체 수명(메서드 체인은 C++20까지 위험), vector<bool> 프록시, 커스텀 타입의 begin/end, 순회 중 수정 금지와 실전 패턴을 예제로 정리합니다.
-
C++ 참조: lvalue·rvalue·const 참조, 참조 vs 포인터, 참조 축약 규칙
C++ 참조 정리. 큰 객체를 복사 없이 넘기는 문제에서 출발해 lvalue 참조, rvalue 참조, const 참조, 참조와 포인터의 차이, 참조 축약 규칙과 자주 나는 에러를 예제로 다룹니다.