[C++]static, const

happyyeom·2025년 7월 7일

static

static키워드를 사용하면 자동지속에서 정적지속으로 변수의 유효 범위가 바뀐다. 즉, static키워드는 지역 변수를 정적 변수로 바꾼다.

#include <iostream>

void func() {
	static int b = 10;

	std::cout << "b : " << b << std::endl;
	b++;
}

int main() {
	func();
	func();
	func();
	func();
	func();

	return 0;
}

출력결과
b : 10
b : 11
b : 12
b : 13
b : 14

const

상수란 1, 'A'처럼 변하지 않는 값을 의미한다. 변수를 상수화하려면 자료형 앞이나 뒤에 const키워드를 붙이면 된다. 보통 의례적으로 자료형 앞에 붙인다.

const int a = 1;
a = 2; //컴파일 오류 발생

만약 포인터 변수를 상수화하였다면 const int *ptr = &a;
a를 변경해도 오류가 발생하지 않는다. 하지만 그 값을 바꿀 수 없다.
하지만 int *const ptr = &a;와 위는 엄연히 다르다.

레퍼런스 변수

C++은 포인터 대신에 사용할 수 있는 '레퍼런스'라는 변수 형식을 제공하는데 상대적으로 쉽게 사용할 수 있다.

변수 이름 앞에 &(앰퍼샌드)를 사용하면 (주소연산자와 같은 기호이지만 완전히 다른 의미이다.) 원본 변수를 참조하겠다는 의미이다.

형식: 자료형 &레퍼런스 변수 이름 = 대상 변수 이름
선언할 때만 이렇게 하고 사용할 때는 그냥 레퍼런스 변수 이름으로 사용하면 됨

그럼 매개변수를 func(int &ref_a, int &ref_B)를 전달해도 복사본이 아닌 실제 데이터를 참조할 수 있다. 이렇게 되면 main에서 func(a,b)를 호출하는 순간 main에서 넘긴 a,b변수에 또 다른 이유가 부여된다고 이해하면 된다.

레퍼런스 변수는 선언 후 반드시 참조할 원본 변수를 지정해야 하고 한번 참조하면 다른 것을 참조하도록 변경할 수 없다. 또한 참조를 사용할 수 없다.

레퍼런스의 기능은 포인터로도 구현할 수 있지만 C++은 포인터보다 비교적 안전하고 편리하게 다룰 수 있도록 레퍼런스라는 도구를 제공한다.

profile
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

0개의 댓글