C++ 03에서는()을 생략하면 POD 유형이 기본값으로 초기화되고 그렇지 않으면 값 초기화됩니다.
정확히 어떤 일이 발생하지 않습니다. C++ 03 스펙 8.5/9 절에 따르면 비 정적 POD 유형 오브젝트에 대해 초기화자가 지정되지 않은 경우, 해당 오브젝트와 해당 서브 오브젝트는 "불확정 초기 값을가집니다". 즉, 이 아니고이 기본값 초기화와 같습니다. 디폴트 초기화는 POD 유형의 값 초기화와 동일합니다. 즉 객체가 제로 (8.5/5)로 초기화되었지만 빈 이니셜 라이저 (예 : 빈 괄호 8.5/7 당). 따라서 빈 이니셜 라이저가있는 POD 유형 만 기본값 및/또는 값 초기화 할 수 있습니다. 초기자를 지정하지 않으면 비 정적 POD 유형의 기본 초기화가 발생하지 않습니다.
두 번째 예에서는 사용자 정의 생성자가있는 POD 유형이 아닌 경우 value-initializer (괄호) 기호를 생략하면 default-initialization이 기술적으로 발생합니다. 즉 :
bar* ptr_a = new bar; //default initialization
bar* ptr_b = new bar(); //value initialization
은 명심 비 POD 구조체 또는 두 클래스 유형, 8.5/5 당 사용자 정의 생성자, 기본 초기화 및 값 초기화가 존재하는 경우, 모두 호출하지만 사용자 정의 생성자. 결국, 타입이 bar
으로 선언되었으므로, 디폴트와 값 초기화는 똑같은 일을 끝냅니다.
예에서 'bar'의 생성자를 호출하면 'x'를 초기화하는 동안 값을 제공하게됩니다. – Chad