class X{
X(){}
X(X x){} //Error!
};
다음 g ++는 두 번째 생성자에 대해 다음을 불평 :
error: invalid constructor; you probably meant ‘X (const X&)’
안녕하세요, 저는 const 참조를 의미하지 않았습니다. 이번에는 매개 변수 x를 값으로 전달하기 위해 내가 작성한 것을하고 싶었습니다! 왜 이것이 유효하지 않습니까?
class X{
X(){}
X(X x){} //Error!
};
다음 g ++는 두 번째 생성자에 대해 다음을 불평 :
error: invalid constructor; you probably meant ‘X (const X&)’
안녕하세요, 저는 const 참조를 의미하지 않았습니다. 이번에는 매개 변수 x를 값으로 전달하기 위해 내가 작성한 것을하고 싶었습니다! 왜 이것이 유효하지 않습니까?
복사 생성자를 만들고 복사 생성자가 참조를 가져와야합니다. 그렇지 않으면 x를 값에 의해 생성자에 전달할 때 컴파일러는 임시 복사본을 생성해야하는 복사 생성자를 호출해야하는 x의 임시 복사본을 만들어야합니다. 광고 infinium.
따라서 복사 생성자는 무한 재귀를 방지하기 위해 참조로 인수를 가져야합니다.
X(X x){} //Error!
는 복사 생성자를 필요로하기 때문에. 즉 재귀 적이다. 언제 끝나는거야?
복사하려는 개체에 대한 참조 만 전달하여 복사 생성자를 구현하려고합니다.
어떻게 그러한 생성자를 호출하겠습니까? –