오버로드 연산자 함수를 수행 할 때 일반적으로 성능상의 이유로 참조로 전달하는 것이 가장 좋습니다. 그러나 나는 값으로 객체를 전달할 때 여전히 동일한 효과를 갖는다는 것을 알았습니다. 값으로 전달해서는 안되며 연산자에 영향을주지 않습니까? 나는 당신이 두 개의 int 변수를 가지고 있고 그것들을 다른 함수에 넘겨줌으로써 그것들을 바꾸고 싶다면, 당신이 참조로 건네 주면 (또는 포인터를 건네 주면) 작동한다는 것을 안다. 방금 값을 전달하면 변수는 끝까지 변하지 않습니다. 클래스 객체를 전달할 때도 마찬가지입니까?오버로드 함수의 참조 대 값에 의한 객체 전달
예 :
Person Person::operator+(Person obj1){
Person sum;
sum.age = this->age + obj1.age;
return sum;
}
내가 주를 가지고 할 경우 :
Person person1(14);
Person person2(182);
Person3 = person1 + person2;
std::cout << person3.age << std::endl;
그것은 않습니다 내가
Person Person::operator+(Person &obj1){
Person sum;
sum.age = this->age + obj1.age;
return sum;
}
그래서 나는 일종의 생각했던 것처럼 같은 내가 언급 한 스왑 방식과 비슷하다. 스왑 함수에 값을 전달하면 변수의 원래 값은 변경되지 않습니다. 나는 reference 대신에 객체를 그냥 통과 시키면 실제로 변경되지 않을 것이라고 생각했다. 이제는 Person 클래스에서 연산자와 변수가 같은 클래스에 정의되어 있기 때문에 동일하지 않으므로 실제로 연산자에 과부하가 걸린다고 생각합니다.
"하지만 값을 기준으로 개체를 전달할 때 여전히 동일한 효과가 있음을 알았습니다." - 무슨 효과? –
어떤 효과가 있습니까? 예제를 추가하십시오. –
"일반적으로 성능상의 이유로 참조로 전달하는 것이 가장 좋습니다." 요즘은 그 반대가 종종 있습니다. –