CV 타입 제한자 (Const & Volatile Type Qulifiers)
컴파일러에게 특별한 제약을 부과하는 제한자이다.
각각 혼자서 사용할 수 있고, 동시에 사용될 수도 있다.
- const object
컴파일러에게 프로그램 내에서 변수의 값의 바꾸는 것을 막으라고 알린다.
사용자가 const 변수에 값을 다시 대입하면, 컴파일러는 에러를 발생시킨다.
이것은 상수를 선언하는 것과 같으며, 변수에게 non-mutable 속성을 부여하는 것 이다.
- volatile object
컴파일러에게 외부요인 때문에 프로그램에서 건들지 않아도 값이 바뀔 수 있다고 알린다.
컴파일러는 volatile object를 섣불리 최적화하지 않는다.
예를 들어, 다음의 코드에서 flag는 프로그램 내부에서 변하지 않으므로 무한루프와 같다.
따라서 컴파일러는 옆의 주석과 같이 코드를 최적화 한다.
int flag = 0; while(flag != 1) { }; // while( true ) { };
하지만 flag가 외부 하드웨어에서 변할 수 있거나, 다른 프로그램이 조작할 수 있다면,
volatile int로 선언하여 이러한 컴파일러의 최적화를 피해야 한다.
- const volatile object
외부요인에 의해 값이 변경될 수 있지만, 프로그램 내부에서의 값 변경은 막는다.
영문으로 다음과 같이 읽힌다.
- const volatile object.
- const sub-object of volatile object.
- non-mutable volatile sub-object of const object.
변환 (Conversions)
제약이 많은 방향으로 변환될 수 있지만, 그 반대는 성립하지 않는다.
- unqulified -> const -> const volatile
- unqulified -> volatile -> const volatile
참고문서
'# Lang > C++' 카테고리의 다른 글
4.1 표현식 (0) | 2019.04.10 |
---|---|
3.2 기억영역 클래스 지정자 (0) | 2019.04.06 |
2.3 자료형과 형변환 (0) | 2019.03.29 |
2.2 자료형과 데이터 해석 (0) | 2019.03.27 |
2.1 자료형 (0) | 2019.03.26 |