728x90
const 키워드는 변수를 상수화 해주어 변수 값을 변경하려 할 때 막는 역할을 합니다. 읽기는 가능하지만 쓰기(변경)은 불가능합니다.
#include <iostream>
using namespace std;
int main()
{
const int num = 5;
num = 6; // 오류 발생
return 0;
}
C++에서는 const 대신에 #define 전처리기로도 상수형 변수를 선언할 수 있습니다. const로 선언하게 되면 변수의 타입을 확인할 수 있고 상수 식을 대체하여 사용할 수 있습니다.
상수 식(const expression) : https://docs.microsoft.com/ko-kr/cpp/cpp/cpp-constant-expressions?view=vs-2019
const는 포인터에서도 사용이 가능합니다. const 위치에 따라 사용 방법이 다릅니다. char* const로 선언된 경우에는 포인터 값을 바꿀 수 없습니다. 아래의 예제 코드는 오류를 보여줍니다.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char* pt, pt2;
char* const cpt = pt;
*cpt = '0';
// cpt = pt2; // error: assignment of read-only variable ‘cpt’
}
const char*로 선언된 경우에는 포인터가 가리키는 변수의 값을 바꿀 수 없습니다.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char* pt = "Hello";
const char* cpt = pt;
// *cpt = '0'; // error: assignment of read-only location ‘* cpt’
}
멤버 함수를 const를 이용해서 읽기 전용 함수로 만들 수 있습니다. const로 되어있는 멤버 함수 안에서 변수 값을 변경하려고 하면 에러를 발생합니다. const는 멤버 함수의 선언과 정의에서 모두 붙여야 합니다.
#include <iostream>
using namespace std;
class constTest
{
int data = 0;
public:
constTest()
{
}
int getData() const;
/*void setData(int data) const
{
this->data = data; // error: assignment of member ‘constTest::data’ in read-only object
}*/
};
int constTest::getData() const
{
return data;
}
int main(int argc, char* argv[])
{
constTest cT;
cout << cT.getData();
// cT.setData(4);
}
하지만 mutable로 선언된 변수는 const로 되어있어도 변경할 수 있습니다.
#include <iostream>
using namespace std;
class constTest
{
mutable int data = 0;
public:
constTest()
{
}
int getData() const;
void setData(int data) const
{
this->data = data; // error: assignment of member ‘constTest::data’ in read-only object
}
};
int constTest::getData() const
{
return data;
}
int main(int argc, char* argv[])
{
constTest cT;
cout << cT.getData();
cT.setData(4);
cout << cT.getData();
}
/*
실행결과
04
*/
참고자료 : https://docs.microsoft.com/en-us/cpp/cpp/const-cpp?view=vs-2019
728x90
'Programming > C++' 카테고리의 다른 글
C++ 디폴트 매개변수 (0) | 2020.02.06 |
---|---|
C++ reference value(참조형 변수) (0) | 2020.02.04 |
C++ new, delete (0) | 2020.01.20 |
C++11 decltype (0) | 2020.01.20 |
C++11 auto (0) | 2020.01.14 |