: 초기화 시에 '=' 대입을 사용하지 않는 것을 말함.
-> 잘못된 표현이고, 복사라는 것은 이미 만들어진 객체를 이용해 다른
lvalue 에다가 대입할 때 복사가 발생한다.
아래 두 초기화 모두 직접 초기화이다.
1) typeid ()
2) typeid {}
: 초기화시에 '=' 대입을 사용하는 초기화를 말함.
생성자에 explicit을 명시하게 되면, 암시적 형변환을 차단함.
-> Point 의 변환생성자에다가 explicit을 작성해보자.
explicit
: 변환생성자로의 암시적 형변환을 방지함.
-> Point p{5}
--> Point p2 = p; : 추가적으로 복사 생성도 차단할 수 있다.
그런데 대입 연산자에다가는 선언 못한다...
가) 인자가 1개, 2개 있는 변환 생성자를 만들어라
나) 객체를 대입, 유니폼 초기화로 만들어라
다) 인자가 1,2개 있는 생성자를 explicit 명시하고 확인하라.
Point pt{} 의 경우, 직접 초기화이고, 초기화 단 한번만 이루어짐.
Point pt = {}; 의 경우, {} 에서 임시객체가 생성되고, 대입으로 인해
복사가 발생한다.
-> 아니다! 최적화로 인해 바로 생성자가 호출되는 것을 확인할 수 있다.