태그: initialization
8편
-
C++ 0 초기화: 전역 int x;는 0이고 지역 변수는 쓰레기 값인 이유
같은 int x;라도 전역·정적 변수는 0이 되고 지역 변수는 쓰레기 값이 되는 이유를 0 초기화 규칙으로 설명합니다. 정적 초기화가 0 초기화, 상수 초기화, 동적 초기화 순으로 진행되는 과정과 정적 초기화 순서 문제, 명시적 0 초기화 방법을 다룹니다.
-
C++ 값 초기화: int x{}와 int()가 0이 되는 이유와 {}·()의 차이
int x;는 쓰레기 값이지만 int x{};와 int()는 0이 되는 이유를 값 초기화 규칙으로 설명합니다. 기본 타입과 클래스에서 결과가 어떻게 다른지, new 연산자와 배열·멤버 초기화에서의 동작, {}와 ()의 문법적 차이를 예제로 다룹니다.
-
C++11 중괄호 초기화: narrowing 방지, Most Vexing Parse, vector<int>{10}과 (10)의 차이
C++11 중괄호 초기화가 기본 타입, 배열, 구조체, 컨테이너를 같은 문법으로 초기화하면서 narrowing 변환을 컴파일 에러로 막고 Most Vexing Parse를 피하는 방식을 설명합니다. vector<int>{10}과 (10)이 다른 이유, auto와 함께 쓸 때의 함정도 다룹니다.
-
C++ 동적 초기화와 정적 초기화 순서 문제: Meyers 싱글톤·constinit으로 해결하기
C++ 전역·정적 변수가 런타임에 초기화되는 동적 초기화를 정적 초기화와 비교하고, 번역 단위 간 초기화 순서 문제와 순환 의존성, 소멸 순서 문제를 Meyer's Singleton, 지연 초기화, constinit으로 해결하는 방법을 설명합니다.
-
C++ 기본 초기화: 지역 변수가 쓰레기 값을 갖는 이유와 전역·정적 변수와의 차이
초기화자 없이 선언한 지역 int나 포인터가 쓰레기 값을 갖는 기본 초기화 규칙을 설명하고, 전역·정적 변수가 0으로 초기화되는 차이, 클래스 멤버와 배열에서 초기화가 빠지는 경우, 값 초기화와의 비교를 다룹니다.
-
C++ 복사 초기화 vs 직접 초기화: explicit 생성자와 암시적 변환 문제
T x = expr 형태의 복사 초기화와 T x(expr) 직접 초기화가 어떻게 다른지 설명하고, explicit 생성자가 복사 초기화를 막는 이유, 암시적 변환과 변환 연산자, 중괄호 초기화 및 auto 추론과 얽히는 문제를 예제로 다룹니다.
-
C++ std::call_once와 once_flag: 스레드 안전한 1회 초기화와 예외 시 재시도
std::call_once와 once_flag로 여러 스레드가 동시에 호출해도 초기화 코드를 딱 한 번만 실행하는 방법을 싱글톤·설정 로드 예제로 보여 주고, 예외가 나면 다시 시도되는 동작과 인자·멤버 함수 전달법을 설명합니다.
-
C++ 집합체 초기화: 집합체 조건, 중괄호 초기화, C++20 지정 초기화 순서 규칙
C++ 집합체가 되기 위한 조건과 중괄호로 구조체·배열·중첩 구조체를 초기화하는 방법, C++20 지정 초기화의 순서 규칙과 기본값 처리, 설정 구조체와 테스트 데이터에 집합체를 활용하는 패턴을 예제로 설명합니다.