int x;

class Point {
	int x, y;
};
...
Point p;

위 상황에서 x 나 p의 멤버인 x, y는 어떤 경우에는 초기화가 보장되지만, 어떤 경우에는 초기화가 되지 않을 수 있음.

초기화 되지 않은 값을 읽는 것은 undefined behavior를 초래할 수 있다. 이는 프로그램을 멈추게 할 수도있고 반쯤은 랜덤한 값이 들어가서 디버깅도 힘들고 그런 상황이 나올 수 있음.

가장 간단한 룰은 초기화를 사용되기 전에 하는 것

객체의 모든 멤버는 생성자에서 초기화 하기

int x = 0;
double d;
std::cin >> d;  // 입력으로 초기

대입과 초기화를 헷갈리지 말자

// 대입 예시 
TEST::Test(const std::string&name)
{
	theName = name;
}

// 초기화 예시
TEST::Test(const std::string& name) : theName(name) {}

non-local static objects

초기화에서 남은 한 가지 문제는 다른 translation units에 정의된 non-local static objects의 초기화 순서임.