Initialization

변수 선언과 초기화

초기화 문법은 겉모양이 비슷해도 narrowing, 기본 초기화, 값 초기화, 생성자 호출이 다르게 작동한다. 선언 시점에서 유효한 값을 만드는 습관이 중요하다.

01

초기값 배치

나중에 대입하겠다는 변수는 중간 경로에서 읽히기 쉽다. 선언과 동시에 의미 있는 값으로 만든다.

02

중괄호 초기화를 검토한다

int x{3.14}처럼 손실 변환을 컴파일 단계에서 잡을 수 있다.

03

변수 범위를 줄인다

변수는 필요한 블록 안에서 선언해 잘못된 재사용과 수명 착각을 줄인다.

default
초기값 없음 가능 지역 기본형 변수는 초기화되지 않을 수 있다.
읽기 전 대입을 보장하기 어렵다.
value
0 또는 기본 생성 T{} 형태는 값 초기화를 유도한다.
의도를 짧게 남긴다.
copy
= 초기화 암시 변환과 복사 초기화 규칙이 개입한다.
explicit 생성자는 후보에서 빠질 수 있다.
brace
narrowing 방지 축소 변환을 더 엄격하게 막는다.
initializer_list 우선순위는 따로 주의한다.

읽기 전 값 · 변환 손실 · 범위 점검

읽기 전 값 모든 경로에서 변수가 초기화된 뒤 읽히는가.
변환 손실 double에서 int, 큰 정수에서 작은 정수로 줄어드는 변환이 명시적인가.
범위 루프 밖에 둘 필요 없는 변수가 바깥 스코프에 남아 있지 않은가.

안전한 초기화

int count{};
std::string name = read_name();
const auto limit = static_cast<int>(items.size());