본문 바로가기

Language, IDE/C, C++

[C++] 매개변수

반응형

C++의 매개변수 전달방식에는 call-by-valuecall-by-reference 방식이 있다.

 

call-by-value

call-by-value 매개변수 방식은 값에 의한 호출 값을 전달하는 방식이다.

기본적으로 앞에 아무것도 붙이지 않고 사용하면 call-by-value가 된다.

 

call-by-value는 a의 값을 val에 복사해와 val에 3을 넣은 후 지역변수로 사용하기 때문에 a의 값은 변하지 않는다.

 

call-by-reference

call-by-reference 매개변수 방식은 참조에 의한 호출 변수의 주소를 전달하는 방식이다.

변수앞에 &(앰퍼센트)를 붙여 사용한다.

 

call-by-reference는 a의 주소값을 가져와 그 주소값을 참조하여 변수를 사용하기 때문에 a의 값을 변경할 수 있다.

주소를 가져오기 때문에 바꾸는 것 뿐만아니라 두 변수의 자리를 바꾸는 것도 가능하다.

 

C++방식은 아니지만 call-by-reference를 사용하는 방식이 하나 더 있는데 포인터 방식이다.

a의 포인터를 넘긴 후 그 값을 래퍼런스하여 사용하는 방식이다.

 

 

사실 변수를 call-by-reference로 넘기는 것은 번거롭고 매개변수의 값을 변경하는 것은 옳지 않다.(에러는 아니지만) (swap은 괜찮습니다.)

call-by-reference를 사용하는 목적은 클래스와 같은 용량이 큰 변수에 사용하기 위함이다.

call-by-value는 값을 복사하여 넘겨주기 때문에 클래스를 넘길 경우 메모리의 효율성면에서 볼때 좋지 않다.

따라서 클래스는 call-by-reference를 사용하도록 한다. 그리고 보통 클래스의 경우 그 값을 변경시키지 않기 위해 const를 사용하도록 한다.

 

 

printMyClass함수가 MyClass함수를 call-by-reference로 받고 그 함수를 이용한다. 이때 MyClass의 주소값만 가져오기 때문에 값을 복사해오는 call-by-value에 비해 메모리면에서 효율적이다.

 

반응형

'Language, IDE > C, C++' 카테고리의 다른 글

[C++] 프렌드 함수  (0) 2013.06.28
[C++] 클래스 디폴트 접근 제어자  (0) 2013.06.26
[C++] .연산자와 ::연산자  (0) 2013.06.26
[C++] 디폴트 인자  (0) 2013.06.26
[C++] 랜덤함수 - 난수 생성기  (7) 2013.06.25