: {} 안에 아무것도 넣지 않는 것을 영초기화라고 하고,
디폴트값으로 초기화를 진행한다.
0이나 nullptr 이나 0.0f 이나 "" 등등.
: 초기화는그냥 유니폼! 중괄호를 사용하자.
: 생성자 만들때는 암시적 형변환 못하게 explicit을 붙이자.
: 심지어 함수 호출할 때도 {} 묶자.
: {} 중괄호를 이용한 초기화
1) 암시적 형변환을 못하게 함.
2) 모든 타입에 대한 일관적인 형태로 초기화가 가능함
3) 대입연산은 기본적으로 임기객체(복사)를 만든 후, 초기화하는 것임.
배열, 동적할당, stl 컨테이너, 객체 초기화 등
모든 타입에 대한 초기화가 가능한 초기화 방법.
예시 코드
1) 직접 초기화
: () 소괄호, {} 중괄호를 이용한 초기화
2) 복사 초기화
: 일반적인 대입 초기화를 말함.
3) 1번),{} 직접 초기화 따로 사용, 2번)= 와 {} 직접 초기화를 따로 사용한 경우
: 생성자에서 explicit 설정되어 있을 경우에는 2번)를 이용한 초기화는 불가함.
1) 변수의 타입 / 종류에 따라 초기화 방법이 다름
-> "= 값" , "(값)", "{값}"
2) "암시적 형변환에 따른 데이터 손실"이 발생할 수 있음.
problem
- 직접 초기화
int n(0);
int n{0};- 복사 초기화
int n = 0;
int n = {0};
- 참고로 explicit를 선언한 생성자는 "직접 초기화"만 가능함.
가) 아래의 초기화 코드를 모두 유니폼 초기화로 변경하라.
나) int a 데이터를 대입 초기화로 4.8을 넣어라.
/ int b를 유니폼 초기화로 4.8을 넣어라.
다) Point 클래스의 생성자를 만들고, 객체 생성시 대입해서 생성하자.
이후로, 생성자에 explicit을 작성해보자.
-> 컴파일 오류가 발생할 텐데, 이를 처리하자.
: explicit은 직접 초기화만 가능함.
1) explicit 아닌 경우.
-> 문제 없음.
2) explicit 설정한 경우.
-> 단독으로 사용된 {} 직접 초기화만 가능함.