Const

강형우·2022년 11월 30일
0

C++

목록 보기
5/10
post-thumbnail

심볼릭 상수

변수의 상수화

  • 변수를 const를 이용하여 상수화를 할 수 있다.
// const int num; 이런식으로 하게 되면 아무 의미 없는 num이 상수화 되어버리기 때문에 에러가 난다 
// 컴파일 할때 결정이 되는것을 컴파일 타임 상수라고 부른다
const int num = 10;
const float pi { 3.14 };
  • 잘못된 예시 코드
 num = 20; // 잘못된 코드
 pi = 4; // 잘못된 코드
  • 위에서 const로 이미 상수화 시킨 시점에서 num은 상수가 되었는데 num에 다른 값을 넣어주면 상수 = 10; 이 되어버리기 때문에 에러가 난다.
  • pi = 4 역시 에러가 난다.
  • 변수로 상수를 초기화 하는 방법
int main()
{
	int num;
    cin >> num;
    // 런타임 상수
    const int run_num(num);
    num = 10; // 가능
    // run_num = 10; // 불가능
}

constexpr

  • 컴파일 타임에 값이 완전히 결정되는 상수
int main()
{
	//
	constexpr int com_num(10);
    int num;
    cin >> num;
    constexpr int run_num(num); // 런타임에 값이 결정되므로 constexpr을 사용하게되면 에러가 난다.
}

파라미터의 상수화

void printNum(int num)
{
	cout << num << endl;
}
  • 이러한 함수가 있다고 할때, 보통은 받는 인자값 num을 바꾸지 않을 것이다.
  • 바꿔야 하는 경우가 있다고 하면
void printNum(int num)
{
	// num = 30; 가급적 안쓰는 방법
	int n = num;
    // n = 바꾸고자 하는 값;
	cout << n << endl;
}
  • 이런식으로 복사해서 사용하는 경우가 일반적이다.
  • 파라미터 자체를 바꾸는 경우는 드물다.
  • 다른 프로그래머가 코드를 num = 30; 과 같이 사용하는것을 방지하고자 파라미터에 const 선언을 한다
void printNum(const int num)
{
	int n = num;
	cout << n << endl;
}
  • 레퍼런스로 파라미터를 가져오는 방법
void printNum(const int& num)
{
	int n = num;
	cout << n << endl;
}

객체의 상수화

  • 변수를 상수화 했듯이, 객체 역시 상수화 할 수 있다.
const Person person(10);
  • 객체에 const선언이 붙게 되면, 이 객체를 대상으론 const 멤버함수만 호출이 가능하다.
  • 객체의 const 선언은 이 객체의 데이터 변경을 하지 않겠다 라는 의미이다. 따라서 const 멤버함수의 호출만 허용하게 된다.
  • 예제 코드
#include <iostream>
using namespace std;

clss Person
{
private:
	int age;
public:
	Person(int n) : age(n)
    { }
    Person& addAge(int n)
    {
    	age+=n;
        return *this;
    }
    void showData() const
    {
    	cout << "age: "<< age << endl;
    }
};
int main()
{
	const Person person(20);
    // person.addAge(5); //멤버함수 addAge는 const 함수가 아니기 때문에 호출이 불가능하다
    person.showData(); //멤버함수 showData는 const 함수이기 때문에 const 객체를 대상으로 호출이 가능하다.
    return 0;
}

0개의 댓글