비상수 포인터를 통한 상수 수정
주어진 코드에서 상수 변수 e는 2로 초기화됩니다. 그런 다음 const 포인터 w는 e의 주소를 가리키도록 캐스팅되어 변수의 const 특성을 암시적으로 제거합니다. w를 역참조하고 새 값을 할당하면 e 주소의 값이 2에서 5로 수정됩니다.
그러나 *w와 e의 값이 인쇄되면 다르게 나타납니다.
<code class="cpp">cout << *w << endl; // Outputs 5 cout << e << endl; // Outputs 2</code>
이 동작은 *w와 e가 평가되는 다양한 방식을 고려하여 설명할 수 있습니다.
따라서 값의 차이는 *w와 e의 고유한 평가 시간에서 발생합니다. e 주소의 값이 수정되었음에도 불구하고 상수 변수 자체는 컴파일 타임에 수정되지 않은 상태로 유지됩니다. 그러나 상수가 아닌 포인터 w는 자신이 가리키는 주소의 값을 수정할 수 있도록 허용하므로 결과적으로 *w에 대해 5가 출력됩니다.
위 내용은 non-const 포인터가 실제 값의 수정을 허용하더라도 수정된 상수 변수가 컴파일 타임에 원래 값을 유지하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!