문제

 Vector(const Vector& other) // Copy constructor 
 {
    x = other.x;
    y = other.y;

논쟁이 왜 Const입니까?

도움이 되었습니까?

해결책

CTOR가 복사하는 것을 변경할 수 없다는 것을 보장하는 답변을 얻었습니다.

그러나 더 중요한 것은 임시 객체가 비정규 기준에 결합 할 수 없다는 것입니다. COPTR는 Const 객체를 참조하여 임시 객체의 사본을 만들 수 있어야합니다.

다른 팁

논쟁을 수정하지 않기 때문입니다 other CONST CORT CTOR 내부.

당신이했을 때 x = other.x this->x = other.x. 그래서 당신은 만 수정하고 있습니다 this 값을 복사하여 객체 other 변하기 쉬운. 이후 other 변수는 여기에서 읽기 전용이며 Const-Ref로 전달됩니다.

전통적인 카피 -ctor와 친구들은 a const& 위에 지정된 이유에 대한 매개 변수. 그러나 당신은 또한 찾아야합니다 움직임-내연성 그리고 R- 값 참조 (C ++ 0X의 일부가 되려면, 모든 것이 잘 진행됨) const& 매개 변수. 볼 수있는 또 다른 곳은 다음과 같은 스마트 포인터의 구현입니다. auto_ptr (소유권 시맨틱을 전송하는)가 아닌 매개 변수가 유용한 경우.

하기 위해 ~ 아니다 변화 할 수 있습니다 other (사고로)?

사본 생성자를 사용하여 하나의 객체를 다른 객체에 복사하려고 할 때, 우리는 원래 객체 (복사중인)의 원본 사본을 유지해야하므로 객체를 통과하는 동안 일정하게 만들고 참조별로 전달합니다.

사본 생성자의 아이디어는 당신이의 내용을 복사한다는 것입니다. other 객체에 this 물체. const는 당신이 수정하지 않도록합니다. other 물체.

const.

Vector(const Vector& other) 
{
     //Since other is const, only public data member and public methods which are `const` can be accessed.
}

예를 들어 객체를 복사하려면 유용 할 수 있습니다.

...
const Vector& getPosition();
...

Vector* v = new Vector(getPosition());

그렇지 않은 경우 Vector(const Vector& other) 이 예제는 구문 오류를 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top