728x90

const 개념 정리

원문 출처

https://easycoding91.tistory.com/entry/C-%EA%B0%95%EC%A2%8C-const-%EC%9C%84%EC%B9%98%EC%9D%98-%EC%9D%98%EB%AF%B8%EC%99%80-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95

 

 

[C++ 강좌] const 위치의 의미와 사용 방법

const는 constant의 약자로 명사형 사전적 의미로 "상수"를 뜻합니다. 따라서 말 그대로 C++에서 const는 그 대상을 변경하지 않는 "상수"를 의미합니다. 의미하는 바는 굉장히 쉽지만 const 위치에 따라

easycoding91.tistory.com


*멤버 → '클래스'와 관련된 개념

- 멤버 변수: 클래스 내부에 선언된 변수

클래스의 객체(인스턴스)가 가지는 속성(attribute), object의 상태를 저장하고 나타내며, 클래스의 모든 인스턴스가 공유

 

- 멤버 함수: 클래스 내부에 정의된 함수

object가 수행하는 동작(behavior) 나타냄, 멤버 함수는 객체의 상태를 조작하거나 해당 객체와 관련된 작업을 수행

 

Const (4types)

1. const 변수

1-1) const '비'멤버 변수 (클래스 밖)

const int num = 1; // 일반적인 표현
int const num = 1; // 위와 같은 의미
 
num = 2;           // Compile Error

 

1-2) const 멤버 변수 (클래스 안)

class Foo
{
	const int num; // 메모리 할당이 아님
	Foo(void)
		: num(1) // const int num = 1;
	{
	}
};
 
class Bar
{
	const int num;
	Bar(void)
	{
		num = 1; // Compile Error
		// const int num;
		// num = 1;
	}
};

const 변수는 반드시 선언 시 초기화를 해야 함

class의 멤버 변수를 const로 선언 시에는 반드시 초기화 리스트(Initialize List)를 사용해야 함

 

*C++11부터는 class 내부에서 const int num = 1;과 같이 선언 및 초기화가 가능하기도 하지만, 초기화 리스트를 사용하여 멤버 변수를 초기화하는 것이 일반적임

*class 내부에서 const int num;을 한 것은 메모리를 할당하는 것이 아니라 단순히 컴파일러에게 class가 어떤 형태인지 알린 것일 뿐

*따라서 class 내부에서는 const int num;과 같은 형태가 가능 => 이후 초기화 리스트로 실제 값 초기화

 

1-3) const 포인터 변수

a) const 위치가 맨 앞에 있으면서, 포인터 변수가 가리키는 값에 대하여 상수화

int num = 1;
const int* ptr = # // *ptr을 상수화
 
*ptr = 2; // Compile Error
num = 2;  // Pass

**포인터를 통해 num의 value를 조작하는 것을 불가능하게 만든 것 (*ptr = 2는 컴파일에러)

**num 자체가 상수화된 것이 아님 (num=2;와 같은 수정 가능)

 

b) 포인터 변수 자체를 상수화

int num1 = 1;
int num2 = 2;
int* const ptr = &num1; // ptr을 상수화
 
ptr = &num2; // Compile Error

 

2. const 멤버 함수

비 멤버 함수를 상수화시킬 수는 없음

반드시 class 내부에서 정의된 멤버함수만 가능 !! → 실제 상수화되는 대상은 해당 class의 멤버 변수

의미: 해당 멤버 함수 내에서는 동일한 class의 모든 멤버 변수를 상수화시킨다 (멤버 함수의 local variable은 조작 가능, 상수화되지 않음)

int GetString(void) const; // Compile Error
 
class Foo
{
	int num = 1;
 
	int GetNum(void) const
	{
		int a = 1;
		a++;   // 지역 변수는 가능
 
		num++; // Compile Error
		return num;
	}
};

 


 

초기화 리스트 개념 정리

https://velog.io/@sjongyuuu/C-%EC%83%9D%EC%84%B1%EC%9E%90-%EC%B4%88%EA%B8%B0%ED%99%94%EB%A6%AC%EC%8A%A4%ED%8A%B8

 

C++ 생성자(Constructor)와 초기화 리스트(Initialization List)

이번 포스팅은 C++ 생성자와 초기화 리스트에 대해 다루어 보려고 한다.

velog.io

 

728x90

+ Recent posts