본문 바로가기

C++

[C++] Call by Value ,Call by Address, Call by Reference

Call by value

double median(vector<double> vec)

매개변수인 vec의 값을 복사해서 가져온다.

함수 안에서 vec을 변경해도 실제 vec은 변하지 않는다.

 

Call by reference

vector<double> homework;
vector<double>& hw = homework; // hw is a synonym for homework

double grade(double midterm, double final, const vector<double>& hw)

 

const vector<double>& hw는 homework의 또 다른 이름이 된다.

그래서 hw에 하는 행동들은 homework에게 동일하게 적용된다. 그 반대도 마찬가지다.

 

const 키워드는 매개변수를 수정할 의도가 없을 경우 붙이고 수정할 의도가 있을 경우 뺀다.

 

+23.01.18 추가 

https://rehtorb-algorithm.tistory.com/11

 

[C++] call by value, call by address, call by reference 차이

함수가 호출될 때 매개변수에 인자를 어떤 방식으로 넣어줄건지에 대한 개념이죠. call by value : 값에 의한 전달call by address : 주소에 의한 전달call by reference : 참조에 의한 전달 1. call by value 더보

rehtorb-algorithm.tistory.com

이것에 대해 잘 적혀있는 블로그 링크가 있어서 가져왔다.

결론은 call by value, call by address는 대상의 값을 복사해서 전달하는 방식이고

call by reference는 대상을 직접 전달하는 방식이다. 

 

effective C++에 의하면 값을 복사해서 전달하는 방식은 큰 비용이 발생하고 복사 손실이 발생할 수 있기 때문에

값에 의한 전달은 기본 제공 타입, STL 반복자, 함수 객체에만 사용하는 것이 좋다고 한다.

'C++' 카테고리의 다른 글

[C++] iterator  (0) 2021.12.19
[C++] 헤더파일  (0) 2021.12.18
[C++] typedef  (0) 2021.12.17
[C++] cin >> x는 cin을 반환한다  (0) 2021.12.17
[C++] type 지정하기  (0) 2021.12.17