본문 바로가기

# Lang/C++

3.1 CV 제한자 (const, volatile)

 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

외부요인에 의해 값이 변경될 수 있지만, 프로그램 내부에서의 값 변경은 막는다.

영문으로 다음과 같이 읽힌다.

    1. const volatile object.
    2. const sub-object of volatile object.
    3. 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