다음의 코드를 보자



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
int main (void)
{
 
 const int b = 100;
 
 printf("%d\n", b);
 
 int* temp = const_cast<int*>(&b);
 
 *temp = 200;
 
 int* temp2 = temp;
 
 printf("%d\n", b);
 printf("%d\n", *temp);
 printf("%d\n", *temp2);
 
 int* temp3 = const_cast<int*>(&b);
 
 printf("%d\n", *temp3);
 
    return 0;
 
}

const_cast는 참조형의 const나 휘발성을 제거해주는 캐스트방식이다. 즉 위의 const int b는 값형이므로 언뜻보면 캐스트가 안될 수 있지만.
실제 출력되는 값은 temp2의 값이 200으로 변환되어서 컴파일까지 잘 된다.
이게 왜 되는 것인가? const int b의 값을 바꾸는게 되는것인가?
이유는 컴파일러에 있다고 본다. const int b라고 되어있는 부분은 컴파일 시점에서 const int b가 되는 것이 아니라. 100으로 치환되기 때문에 값의 변경과 상관 없이 100의 상수값으로 변경된 것이고 그렇기 때문에 후에 변경하는 값은 b의 값을 아무리 출력해도 100이라는 상수값으로 대체되었기 때문에 100으로 출력되는 것으로 보인다.


Posted by JJOREG