블로그
-
C++ this 포인터: 메서드 체이닝, 자기 대입 검사, 람다 this 캡처 수명
멤버 함수 안의 this가 호출한 객체를 가리키는 원리를 메서드 체이닝, 자기 대입 방지, 콜백 등록 예제로 보여줍니다. 매개변수와 멤버 이름 충돌, static 멤버 함수에 this가 없는 이유, 람다에 [this]를 캡처했을 때의 수명 문제도 다룹니다.
-
C++ thread_local: 스레드별 카운터·버퍼, 초기화 시점과 소멸 순서
thread_local 변수는 이름은 하나지만 스레드마다 별도 메모리에 존재해 락 없이 스레드별 카운터·버퍼·난수 생성기를 만들 수 있습니다. 스레드 시작 시와 첫 사용 시 초기화 차이, 클래스 멤버 선언 방법, 소멸 순서와 메모리 사용량 함정을 다룹니다.
-
C++20 삼원 비교 연산자 <=>: strong·weak·partial_ordering 고르는 기준과 = default
C++20 <=> 연산자 하나로 <, <=, >, >=를 생성하는 방법과 strong·weak·partial_ordering 중 반환 타입을 고르는 기준을 설명합니다. = default의 사전식 비교, 대소문자 무시 같은 커스텀 비교, ==가 따로 생성되는 규칙도 다룹니다.
-
C++ sleep_for·sleep_until로 주기 작업 만들기: 누적 드리프트와 짧은 sleep의 부정확함
sleep_for와 sleep_until, yield로 주기 작업과 타임아웃을 만들 때 생기는 문제를 예제로 다룹니다. sleep_until로 누적 드리프트를 줄이는 법, 짧은 sleep의 부정확함, 바쁜 대기의 비용, steady_clock을 써야 하는 이유, Asio 타이머와의 연계도 설명합니다.
-
C++ std::tuple: 여러 값 반환, std::tie와 구조적 바인딩, 구조체와 비교
std::tuple로 여러 값을 한 번에 반환하고 std::get, 구조적 바인딩, std::tie로 꺼내는 방법을 비교합니다. tie를 이용한 사전식 비교와 정렬, tuple_cat과 std::apply 활용, pair 대신 tuple을 쓸지 구조체를 쓸지 판단하는 기준도 다룹니다.
-
C++ queue와 stack: 컨테이너 어댑터 사용법과 BFS·DFS 활용
C++ STL의 stack·queue·priority_queue 사용법과 내부 동작 원리를 비교하고, DFS·BFS·작업 스케줄링 실전 예제와 커스텀 비교자 설정 등 흔한 컴파일 에러 해결법을 정리합니다.
-
C++ std::string 자주 쓰는 함수 정리: 검색·치환·분할과 흔한 실수, 성능 팁
C++ std::string 사용법 정리. 생성과 연결, find·substr·replace 같은 자주 쓰는 함수, 문자열 분할 같은 실전 예시, 자주 생기는 문제와 성능 최적화 팁을 예제로 다룹니다.
-
C++ std::vector 기초: 생성·삽입·삭제와 배열 대신 쓰는 이유
크기가 고정되고 범위 검사도 없는 C 배열 대신 std::vector를 쓰는 이유를 선언, 추가·삭제, operator[]와 at() 차이, 2차원 벡터, sort·find 예제로 보여줍니다. size()를 int로 받는 실수, 반복 중 삭제, reserve와 resize 혼동도 다룹니다.
-
C++20 stop_token·stop_source·stop_callback: jthread와 협력적 취소 구현
C++20 std::stop_token·stop_source·stop_callback과 std::jthread로 협력적 취소를 구현하는 방법입니다. 워커 루프, condition_variable_any 연동, 콜백 수명 주의점을 실전 코드와 함께 설명합니다.
-
C++ 스톱워치와 벤치마크 | chrono로 실행 시간 측정하기
외부 라이브러리 없이 <chrono>만으로 재사용 가능한 스톱워치 클래스와 스코프가 끝날 때 시간을 찍는 RAII 타이머를 만듭니다. 여러 번 측정해 평균·중앙값 등으로 해석하는 법, 컴파일러가 측정 대상 코드를 지워 버리는 문제를 막는 법도 다룹니다.