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

 

C++ 상수 식

C++ 상수 식C++ Constant Expressions 이 문서의 내용 --> 상수 값은 변경되지 않는 값입니다.A constant value is one that doesn't change. C++에서는 개체를 수정할 수 없음을 나타내는 의도를 표현하고 해당 의도를 적용할 수 있는 두 가지 키워드를 제공합니다.C++ provides two keywords to enable you to express the intent that an object is

docs.microsoft.com

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

 

const (C++)

const (C++) In this article --> When modifying a data declaration, the const keyword specifies that the object or variable is not modifiable. Syntax const declaration ; member-function const ; const values The const keyword specifies that a variable's valu

docs.microsoft.com

 

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

+ Recent posts