2010-08-03 6 views
3

는 선언 및 유형 C의 변수를 초기화하는 다음과 같은 방법으로 생각해 서로C++ 변수 선언과 초기화 규칙

C c1; 

C c2; 
c2 = C(); 

C c3(C()); 

C c4 = C(); 

이들 모두 완전히 동등, 또는 이들의 일부는 정확한에 따라 다릅니다 수 있습니다 C의 정의? (공용 기본 및 복사 생성자가 있다고 가정).

답변

10

이러한 의미 :

C c1; // default constructor 

C c2; // default constructor 
c2 = C(); // default constructor followed by assignment 

C c3(C()); // default constructor possibly followed by copy constructor 

C c4 = C(); // default constructor possibly followed by copy constructor 

참고 컴파일러는 복사 생성자 호출을 생략하다 할 수 있습니다. 그들은 동등한가? - 음, 복사 생성자와 대입 연산자가하는 일에 달려 있습니다.

+3

복사본을 생략해도 요구 사항이 확인된다는 점에 유의하십시오. 즉,이 생성자가이 레벨에서 액세스 할 수 없으면 (개인/보호) 복사 생성자가 호출되지 않아도 3과 4가 컴파일되지 않습니다. –

+0

@David True.이 경우 질문은 명시 적으로 복사 생성자가 public임을 명시합니다. –

+0

그래서 복사 생성자가 private이면'c3'와'c4'는 컴파일되지 않지만'c2'는 여전히 유효할까요? (과제 포함). 'func (c2)'에 대한 호출은 개인용 복사 생성자와 함께 컴파일되지 않습니까? –