: 인자를 넣지 않고, 중괄호를 이용한 초기화를 말함.
-> 컴파일러가 0으로 초기화를 함.
예시
int n1; // 디폴트 초기화 -> 이때는 쓰레기 값임.
int n2{}; // value 초기화 -> 0으로 초기화.
그러나 int n3(); 과 같은 경우는 함수 선언이기 때문에 에러 발생.
변수를 선언만 한 상태
: default initialization
-> 쓰레기값으로 설정됨.
중괄호를 작성한 상태
: value initialization
-> 0으로 초기화 됨.
예시 코드
: cl 컴파일러는 지역변수 초기화하지 않았따는 오류를 발생시킴.
-> 실행하면 그냥 터짐...
객체를 대입 , () 초기화 , {} 초기화 했을 때 확인해보자.
객체에다가 () 초기화의 경우, 객체 생성이 아니고, 함수를 호출하는 것으로 받아들인다.
호출 함수에러 발생한 부분을 지우고, 이렇게 하니까. p3생성자 호출도 아니다.
컴파일러가 받아들이기에 생성자 호출도 아니고, Point 함수가 있는 건가? 라고 생각하기만 한다.
: p1과 p2의 객체 생성자만 호출됨.
-> 그런데 핵심은 객체에 대해서 value 초기화를 했지만, p1과 p2의
멤버들은 0으로 초기화되지 않았다. (p3 객체의 생성자가 호출되는지 확인하기 위해 기본 생성자 따로 만들어 확인한 거임...)
이유는
: 유저 타입 기본 생성자를 만들었기 때문이고, 유저 타입 생성자를 지우고 다시 실행해보자.
p2 객체의 멤버는 0으로 초기화된 것을 확인할 수 있다.
c++ 11에서의 defalut 키워드를 작성하면 컴파일러에게 기본 생성자
제작을 위임하므로, 이 때는 생성자가 없는 코드와 동일한 동작이 이루어짐.