본문 바로가기
프로그래밍 언어/C++

[C++] 레퍼런스 Reference

by 까망 하르방 2025. 1. 19.
반응형

레퍼런스 (reference, 참조)

이미 존재하는 변수에 추가적인 별칭 부여

#include <iostream>

int main()
{
	int  n = 10;
	int& r = n;

	r = 20; // 값 변경

	std::cout << n << std::endl;  // 20

	// 동일한 주소를 가리킴
	std::cout << &n << std::endl; 
	std::cout << &r << std::endl;
}

 

 

C 언어에서는 void swap(int* p1, int* p2) 와 같이

call by pointer 방식을 사용했다면

 

C++에서는 void swap(int& r1, int& r2) 와 같이

call by reference 형태가 가능하다.

포인터 방식보다는 간결하게 코드를 작성할 수 있다.

 

#include <iostream>
#include <algorithm>

void swap(int* p1, int* p2)
{
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

void swap(int& r1, int& r2)
{
	int temp = r1;
	r1 = r2;
	r2 = temp;
}

int main()
{
	int x = 10, y = 20;

	swap(&x, &y);
	printf("%d %d\n", x, y); // 20 10

	swap(x, y);
	printf("%d %d\n", x, y); // 10 20
}

 

 

Q) 함수 인자 전달 방식에서 어떤 타입을 주는 것이 좋을까?

A) 인자 타입에 따라 다르다.

 

• user define

 → const reference 사용

 일반적으로 타입 크기가 primitive type 보다 크며,

 복사 생성자 호출 오버헤드를 줄일 수 있다.

 

• primitive type

 → call by value 사용

 타입 크기가 크지 않은 편이기에

 reference 보다 더 많은 컴파일러가 최적화 지원

struct Pos
{
	int x, y;
};

// ------------------------------

// primitive type
void f3(int n) {} // Good
void f4(const int& r) {}

// user define
void f1(Pos r) {}
void f2(const Pos& r) {} // Good
반응형

댓글