2013-06-17 2 views
2

클래스에 여러 기본 생성자 함수를 포함 할 수 있습니까? 나는 무엇이든이 "디폴트"의 정의에 의해서만 하나의 디폴트 함수를 가질 수 있다고 생각하기 때문에 궁금합니다. 그러나 나는 너무 확신하지 못합니다.C++ 및 생성자 함수의 클래스

+7

기본 생성자가 여러 개인 경우 선택하겠습니까? – chris

+1

기본 생성자는 매개 변수를 허용하지 않는 생성자를 의미합니까? 그렇다면 컴파일러가 어떤 것을 의미 하는지를 어떻게 알 수 있을까요? –

+5

@ T.Kiley, 정의에 따르면, 그것은 인수없이 호출 될 수 있습니다. 여전히 기본 인수가 허용된다는 의미입니다. – chris

답변

7

클래스에는 여러 기본 생성자가있을 수 있습니다.

class C2 
{ 
public: 
    C2() {} 
    C2() {} // error: C2::C2() already defined 
}; 
: 동일한 서명이 생성자를 가질 수 없다 그러나

class C 
{ 
public: 
    C(); // a default constructor 
    C(int = 0); // another default constructor 
}; 

C c1; // error: ambiguity; both C::C() or C::C(int) with the default argument 0 match 
C c2(0); // OK, no ambiguity 

참고 : 그렇게하려고 할 때, 당신은 모호함으로 실행하는 것 때문에이 경우에, 당신은 할 수없는 그것을 기본-구성

+0

제 컴파일러 (GCC 4.8.1)에서 'std :: is_default_constructible'가 false 인 경우입니다. [문서] (http://en.cppreference.com/w/cpp/types/is_default_constructible)에 따르면 특성은 "클래스에 액세스 가능한 기본 생성자가 있는지 여부"를 확인합니다. 컴파일러 나 해당 웹 사이트가 잘못되었거나 UB입니다. –

+0

@KerrekSB, 그것은'std :: is_constructible :: value'의 관점에서 정의되었고 가장 가까운 것은 § 20.9.4.3/6입니다. 그러나 이것이 올바른 것이면 잘 모르겠습니다. – chris

+0

@Kerrek : 웹 사이트가 잘못되었습니다 (평소와 같이). –