변수는 이름 붙은 객체다. 타입은 그 객체에 어떤 값을 넣고 어떤 연산을 할 수 있는지를 컴파일 시점에 고정한다.

C++ 2. 변수, 타입, 초기화의 핵심 흐름도
그림. 타입과 초기값을 함께 정하면 미정의 값을 읽지 않는다.

기본 타입

정수 `int`, 부동소수 `double`, 참과 거짓 `bool`, 문자 `char`가 출발점이다. 크기가 중요한 정수에는 `<cstdint>`의 `std::int32_t`처럼 너비가 드러나는 이름을 쓴다. `int`의 비트 수는 구현마다 다를 수 있고, 16비트 이상이라는 점만 표준이 보장한다.

int games = 0;
double rate = 0.5;
bool playing = true;
auto moves = 42;  // int로 추론

`auto`는 초기화 식의 타입을 추론한다. 타입을 숨기려고 쓰기보다, 반복자처럼 이름이 긴 곳에서 쓴다.

중괄호 초기화

`int n{3};`은 직접 목록 초기화다. 좁아지는 변환은 거부한다. `int n{3.8};`은 컴파일 오류다. `int n = 3.8;`은 소수부를 버리고 3이 될 수 있다. 새 코드에서는 중괄호로 의도를 드러내는 쪽이 안전하다.

값이 없는 기본 초기화 `int n{};`는 0이다. 클래스 타입은 생성자가 정한 값으로 초기화된다.