비-상수 포인터를 통해 const 수정
C에서는 const 변수가 초기화되면 수정할 수 없습니다. 그러나 특정 시나리오에서는 const 변수가 변경된 것처럼 보일 수 있습니다. 다음 코드를 고려해보세요.
<code class="cpp">const int e = 2; int* w = (int*)&e; // (1) *w = 5; // (2) cout << *w << endl; // (3) cout << e << endl; // (4)</code>
이 코드를 실행하면 예기치 않은 동작이 나타납니다.
5 2
(2)에서 *w가 5로 변경되었음에도 불구하고, e는 여전히 원래 값인 2를 유지합니다. 이렇게 역설적으로 보이는 동작은 다음 요소에서 비롯됩니다.
결과적으로 *w가 런타임에 평가되면 수정된 값(5)을 반환합니다. 그러나 컴파일 타임에 e가 평가되면 원래 값(2)이 사용됩니다.
이러한 동작을 C에서는 정의되지 않은 동작이라고 합니다. const 변수를 직접 또는 간접적으로 수정하면 예측할 수 없는 결과가 발생하므로 이러한 상황에서는 주의가 필요합니다.
위 내용은 Const가 아닌 포인터를 통해 `const` 변수를 수정하는 것이 작동하는 것처럼 보이지만 실제로는 값이 변경되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!