나는 그것이 가능하다는 것을 알았지 만 나는 그 이해를 이해하지 못한다.volatile에 대한 const_cast <>의 목적은 무엇입니까?
답변
여기에 대한 세부 오히려 음란 한 양의로 전환 안드레이 Alexandrescu에 의한 Dr. Dobbs article을합니다.
대단히 흥미로운 기사입니다. Upvoted. – Puppy
알렉산드레스쿠 (Alexandrescu)가 작성한 많은 다른 것들과 마찬가지로 그 기사는 계몽적입니다. 나는 그 기사와 그가 얼마 전 제안한 '휘발성 (volatile)'한정어의 남용에 관한 질문을했다. http://stackoverflow.com/questions/2491495/may-volatile-be-in-user-defined-types-to- help-writing-thread-safe-code –
실제로 훌륭한 기사입니다. 공유해 주셔서 감사합니다. +1. – jweyrich
const
및 volatile
소리는 변수에 같은 생각을 지칭하지만, 그들은하지 않습니다. const
변수는 현재 코드로 변경할 수 없습니다. volatile
변수는 현재 코드 외부의 일부 외부 엔티티에 의해 변경 될 수 있습니다. const volatile
변수 (특히 메모리 매핑 레지스터와 같은)를 사용하면 프로그램에서 예측할 수없는 시간에 컴퓨터에서 변경되지만 코드를 직접 변경할 수는 없습니다. const_cast
을 사용하여 const
또는 volatile
("cv-qualification")을 변수에 추가하거나 제거 할 수 있습니다.
const
및 volatile
은 직교한다.
const
은 데이터가 읽기 전용임을 의미합니다.
volatile
은 외부 이유로 인해 변수가 변경 될 수 있으므로 컴파일러가 참조 할 때마다 메모리에서 변수를 읽어야합니다.
따라서 const
을 제거하면 읽기 전용 위치 인 코드를 작성할 수 있습니다. 코드는 위치를 실제로 수정할 수있는 특별한 지식이 있어야합니다. 당신은 정의되지 않은 동작이 발생할 수 있기 때문에 volatile
가 작성 제거 안 (7.1.5.1/7으로 인해 - If an attempt is made to refer to an object defined with a volatile-qualified type through the use of an lvalue with a non-volatile-qualified type, the program behaviour is undefined.
)
'const_cast'는'const'와'volatile' 모두에 적용될 수 있습니다. 잠재적으로'volatile'을 제거하면 정의되지 않은 동작이 발생할 수 있습니다 , 그렇지 않은 경우가 있습니다. 나는. 메모리 장벽을 추가하면 컴파일러가 변수를 캐싱하지 않게되어 변수가 캐시되지 않고 중요한 섹션 외부에서 재 배열되지 않게되므로 '휘발성'이라는 강력한 보장을 제공합니다. –
- 1. <meta name = "MSSmartTagsPreventParsing"content = "TRUE">의 목적은 무엇입니까?
- 2. 이 코드에서`@ins << lambda`의 목적은 무엇입니까?
- 3. _never_executed()의 목적은 무엇입니까?
- 4. Array.GetLowerBound (int)의 목적은 무엇입니까?
- 5. 방법 목록 <string>의 목적은 (메서드를 추가하는 방법 C#의 목록에 대한 구현)</p> <p>listobject.Add() 메소드는</p> <p>구현되는 추가 방법에 대한 도움이 되거하시기 바랍니다 공급 된 문자열을
- 6. jquery에서 $ ('<div></div>')의 기능은 무엇입니까?
- 7. <RequiredTargetFramework>와 <targetframeworkversion>의 차이점은 무엇입니까?
- 8. <%# %>과 <%= %>의 차이점은 무엇입니까?
- 9. mysql에서 '! ='와 '<>'의 차이점은 무엇입니까
- 10. DataContext.GetTable <TEntry>의 기능은 무엇입니까?
- 11. Response.Write와 <%= %>의 실제 차이점은 무엇입니까?
- 12. Ruby에서 '<==>'의 의미는 무엇입니까?
- 13. OpenXML에서 <a:theme>의 의미는 무엇입니까?
- 14. 일반 ViewMasterPage <T>의 사용 사례는 무엇입니까?
- 15. SELECT ... * FOR UPDATE *의 목적은 무엇입니까?
- 16. >>의 의미, <<, | JavaScript에서 & nbsp;
- 17. <span></span> 요소 란 무엇입니까?
- 18. "사용하지 않는 참조 제거"의 목적은 무엇입니까
- 19. Java 스트림에서 flush()의 목적은 무엇입니까?
- 20. Embperl에서 % mdat (% udat와 비교)의 목적은 무엇입니까?
- 21. "Item []"의 PropertyChange를 높이는 ObservableCollection의 목적은 무엇입니까?
- 22. Seam에서`wire()`와`isWired()`의 목적은 무엇입니까?
- 23. "Container c = getContentPane();"의 목적은 무엇입니까? 스윙에서?
- 24. Yii의 구성 요소 (클래스)의 목적은 무엇입니까
- 25. "네임 스페이스 사용"의 목적은 무엇입니까?
- 26. <pre><code></code></pre>의 내용을 IE7에서 올바르게 렌더링하는 방법은 무엇입니까?
- 27. Ctrl + C와 Ctrl + [?]의 차이점은 무엇입니까? <kbd>Ctrl 키</kbd> + <kbd>C</kbd> 및 <kbd>Ctrl 키</kbd> + <kbd>[</kbd>의 차이점은 무엇
- 28. 의 DataTable은</p> <p>... 그러나,
- 29. 일치 시간 StackOverflow-</p> <p>의
- 30. 뷰의 setContentDescription() 목적은 무엇입니까?
'const volatile'에서 'volatile'또는 다른 것으로 캐스팅하는 것에 대해 묻는 중입니까? –
항상 그렇듯이 일부 코드를 게시하면 도움이됩니다. –
C 언어에'const_cast <> '가 없으므로 C 태그가 제거되었습니다. –