블로그
-
C++ 범위 기반 for문과 구조화된 바인딩 | 모던 C++ 반복문
C++11 범위 기반 for와 C++17 구조화된 바인딩 사용법. auto·auto&·const auto&·auto&& 선택, map 순회, 임시 객체 수명(메서드 체인은 C++20까지 위험), vector<bool> 프록시, 커스텀 타입의 begin/end, 순회 중 수정 금지와 실전 패턴을 예제로 정리합니다.
-
C++17 optional·variant·any: nullptr 체크 대신 타입으로 표현하기
값이 없을 수 있는 결과는 nullptr 대신 std::optional로, 여러 타입 중 하나는 std::variant와 std::visit으로, 임의 타입은 std::any로 표현하는 방법을 비교합니다. 빈 optional 접근, 잘못된 get·any_cast 같은 흔한 실수도 짚습니다.
-
const·noexcept·[[nodiscard]]로 C++ 인터페이스 의도 명확히 하기
const 없이 넘긴 설정이 어딘가에서 바뀌거나 init() 실패를 무시하는 문제를 const correctness, noexcept, [[nodiscard]]로 막는 방법을 다룹니다. mutable의 쓰임, 이동 생성자에 noexcept가 없을 때 vector가 복사를 고르는 이유도 설명합니다.
-
C++ 인터페이스 설계와 PIMPL: 컴파일 의존성을 끊고 바이너리 호환성(ABI) 유지하기
private 멤버 하나만 바꿨는데 전체가 다시 빌드되는 문제를 PIMPL로 막는 방법을 설명합니다. 헤더 의존성이 재컴파일 범위를 넓히는 원리, Rule of Five 처리, incomplete type 에러, 이동 후 상태, PIMPL의 비용과 대안(전방 선언, Fast PIMPL)을 다룹니다.
-
루프가 병목일 때: 자동 벡터화, std::execution 병렬 정책, SSE·AVX2·AVX-512 인트린직
C++ SIMD와 병렬 알고리즘 정리. 루프 병목에서 출발해 std::execution 정책, 자동 벡터화 조건, SSE·AVX2·AVX-512 인트린직 사용법, 자주 나는 에러와 성능 벤치마크를 다룹니다.
-
C++ 패키지 관리 실무: vcpkg와 Conan으로 외부 라이브러리 의존성 지옥 탈출
헤더 하나 쓰려다 경로 설정에 막히는 의존성 문제를 vcpkg와 Conan으로 푸는 실무 방법을 다룹니다. vcpkg 오버레이 포트와 버전 제약, Conan 프로필·옵션·lockfile을 설명하고 CI, 멀티 플랫폼, 사내 저장소, Docker 환경에서 쓰는 패턴을 비교합니다.
-
C++ 프로젝트 CI 구성: GitHub Actions 멀티 OS·컴파일러 매트릭스, vcpkg 캐시, 테스트
로컬에선 되는데 CI에서만 실패하는 C++ 프로젝트를 위한 GitHub Actions 구성. 멀티 OS·컴파일러 매트릭스, CMake 빌드, vcpkg·Conan 캐시, 테스트 실행과 최적화 팁을 다룹니다.
-
Docker DevContainer로 C++ 빌드 환경 통일하기
C++ 빌드 환경을 Docker 이미지로 고정하는 방법입니다. 멀티 스테이지 빌드, vcpkg/Conan 의존성 캐시, VS Code Dev Container 설정, ccache·BuildKit 캐시, 컨테이너 안 GDB 디버깅과 자주 나는 런타임 에러를 다룹니다.
-
C++ 파일 입출력: ifstream·ofstream 기초부터 에러 처리, 버퍼링, 원자적 쓰기까지
C++ 파일 입출력 정리. ifstream·ofstream·fstream으로 읽고 쓰기, 에러 처리와 스트림 상태 확인, 버퍼링과 flush, 임시 파일과 rename을 이용한 원자적 쓰기, 한글 경로 처리를 다룹니다.
-
C++ 바이너리 직렬화: 엔디안·구조체 패딩 문제와 버전 관리·체크섬
게임 세이브 파일이 다른 PC에서 깨지는 원인을 엔디안과 구조체 패딩으로 추적하고, string·vector 같은 동적 데이터를 길이와 함께 안전하게 저장하는 방법을 보여줍니다. 포맷 버전 관리, 체크섬, 원자적 쓰기와 백업 같은 운영 패턴도 다룹니다.