2010-05-07 5 views
13

아는 한 복사 생성자는 T(const T&) 또는 T(T&)이어야합니다. 서명에 기본 인수를 추가하려면 어떻게해야합니까?기본 인자가있는 복사 생성자

T(const T&, double f = 1.0); 

표준을 준수합니까?

+0

[this PR] (http://llvm.org/bugs/show_bug.cgi?id=5989) 얼마 전 clang으로 보내어 일부 게임을 플레이 해 보았습니다. –

+0

http://punchlet.wordpress.com/2009/12/03/letter-the-third/ –

답변

25

예.

§ [class.copy/2 : 첫번째 파라미터 타입 X&, const X&, volatile X& 또는 const volatile X& 인 경우

클래스 X위한 템플릿이 아닌 생성자하는 복사 생성자이며 어느 다른 매개 변수가 없습니다 다른 모든 매개 변수는 기본 인수가 있습니다 [예 :X::X(const X&)X::X(X&,int=1)은 복사 생성자입니다.

6

당신은 두 개의 서로 다른 생성자를 만들 수 있습니다

T(const T&) 
T(const T&,double) 

을하지만, 당신이 복사 생성자으로 허용되는 무슨.

참고로 C++에서 기본 매개 변수를 사용하는 것은 일반적으로 좋지 않은 것으로 나타났습니다. 매개 변수 수가 적은 매개 변수가 매개 변수가 많은 매개 변수를 호출하는 오버로드를 사용하는 것이 훨씬 더 좋습니다. 디폴트 값을 사용합니다 (물론 ISO C++ 2003의 생성자에서는 불가능하지만 ISO C++ 201x에서는 위임자 생성자가 허용됩니다). 그 이유는 기본값을 사용하면 함수에 명백한 동작과 다른 실제 서명을 부여하기 때문에 함수에 대한 포인터를 사용할 때 다소 어렵거나 고통 스럽습니다. 오버로드를 제공함으로써 가능한 모든 호출 유형의 함수 포인터가 작동하도록 "바인딩"메커니즘을 요구하지 않고 취할 수 있습니다.

+1

좋은 지적. 오버로드 된 함수의 주소를 취하는 것은 너무 고통 스럽다. 그러나 최소한 IMO는 작동한다. – UncleBens