volatile 키워드를 쓸 경우, 메모리에 올라와 있는 값을 직접 참조하도록 해서 500이 출력된다.
#include <iostream>
using namespace std;
int main(){
//컴파일러가 최적화
const int cint = 300;
//volatile const int cint = 300;
cout << cint << endl;
cout << &cint << endl;
//문법적으로 cint 값을 바꿀 수 없음(=컴파일 단계에서 막아둠). 포인터로는 강제로 접근해서 값을 바꿀 수 있다.
int* ptr = (int*) &cint;
*ptr = 500;
cout << ptr << endl;
cout << cint << endl;
}
00007FF60FCE1944 mov edx,12Ch
00007FF60FCE1949 mov rcx,qword ptr [__imp_std::cout (07FF60FCF0178h)]
00007FF60FCE1950 call qword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (07FF60FCF0158h)]
00007FF60FCE1956 lea rdx,[std::endl<char,std::char_traits<char> > (07FF60FCE1037h)]
00007FF60FCE1944 mov edx, 12Ch
해당 라인에서 edx general purpose register 로 값을 옮겨 놓음.