2010-04-27 7 views

답변

5

을 그 일을 왜; 이 경우,

myClass::myClass() 
    : member1(0), member2(1) 
{ 

} 

만 생성자는 초기화 목록을 가질 수 있습니다, 그것은에는 반환 유형을 지정할 수 없습니다, 그것은 예를 들어, 클래스, 같은 이름을 가질 필요가; 해당 유형의 초기화를 Init 함수에 위임 할 수 없습니다.

모든 정적 멤버는 생성자 이니셜 라이저 목록에서 초기화 할 수 있습니다. 모든 const 및 참조 멤버는 생성자 이니셜 라이저 목록에서 초기화해야합니다.

생성자의 본문보다는 모든 것이 동일합니다 (때로는 가능하지 않거나 이니셜 라이저 목록을 사용하는 것이 번거롭기 때문에 분명히 사용하면 안됩니다).

+0

괜찮습니다. 하지만 이전에 클래스 내에서 정적 const 멤버 만 선언 할 수 있다는 오류를 받았습니다. 즉, 정적 및 상수 멤버 만 클래스 선언 내에서 intializer 목록 또는 생성자 본문에 반대되는 값을 할당 할 수 있습니다. – numerical25

+1

정적 정수 멤버 만 클래스 선언 내에서 초기화 할 수 있습니다. 모든 비 통합 멤버는 클래스 선언에서 외부에서 초기화해야합니다. (즉, 선언에서 정적 플로트를 초기화 할 수는 없지만 int, short, char 또는 bool 일 수 있습니다). –

0

정적 클래스 멤버는 특정 개체에 속하지 않습니다. 정적 멤버는 해당 클래스의 모든 객체간에 공유됩니다. 따라서 생성자에서 초기화하지 마십시오. 예를 들어 너무 자주 다시 초기화합니다.

이제 정적 요소 인 const 클래스 멤버 만 클래스 자체에서 초기화 할 수있는 이유가 있습니다. 그 이유는 클래스가 헤더에서 가장 가능성이 높으며 헤더가 여러 번역 단위에 포함되어 있기 때문입니다. 이로 인해 컴파일러에 문제가 발생합니다. 어떤 번역 단위 (즉, 어떤 객체 파일)에 실제 초기화를 넣어야합니까? 하지만 단순한 const에서는 중요하지 않습니다. int const TWO = 2;은 번역 단위에서 실제 초기화가 필요하지 않지만 컴파일러는이를 기억합니다.

관련 문제