Vi que era posible hacerlo, pero no entiendo el interés.¿Cuál es el propósito del const_cast <> en un volátil?
Respuesta
He aquí una Dr. Dobbs article por Andrei Alexandrescu que entra en cantidades obscenas de más detalles al respecto.
Ese es un artículo extremadamente interesante. Upvoted. – Puppy
Al igual que con muchas otras cosas que Alexandrescu ha escrito, ese artículo es esclarecedor. Hice una pregunta sobre ese artículo y el abuso del calificador 'volátil' que propone hace algún tiempo http://stackoverflow.com/questions/2491495/may-volatile-be-in-user-defined-types-to- help-writing-thread-safe-code –
De hecho, es un gran artículo. Gracias por compartir. +1. – jweyrich
const
y volatile
parece que se refieren a la misma idea en una variable, pero no es así. Una variable const
no puede ser cambiada por el código actual. Una variable externa puede cambiar una variable volatile
fuera del código actual. Es posible tener una variable const volatile
, especialmente algo así como un registro mapeado en la memoria, que la computadora cambia en un momento en que su programa no puede predecir, pero que su código no puede cambiar directamente. Puede usar const_cast
para agregar o eliminar const
o volatile
("cv-qualification") a una variable.
const
y volatile
son ortogonales.
const
significa que los datos son de solo lectura.
volatile
significa que la variable podría estar cambiando debido a razones externas por lo que el compilador necesita leer la variable de la memoria cada vez que se hace referencia a ella.
Así que eliminar const
le permite escribir lo que de otra manera sería una ubicación de solo lectura (el código debe tener algún conocimiento especial de que la ubicación es realmente modificable). No debe quitar volatile
escribirlo, ya que podría provocar un comportamiento indefinido (debido a 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' se aplica a' const' y 'volátil', y si bien la eliminación de' volátil' puede causar un comportamiento indefinido , hay casos donde no. Es decir. agregar barreras de memoria obligará al compilador a no almacenar en caché la variable y proporciona una garantía más sólida de que 'volátil' (no solo la variable no se almacenará en caché, sino que las instrucciones no se reordenarán fuera de la sección crítica). –
- 1. ¿Cuál es el propósito de ANYSIZE_ARRAY en <winnt.h>?
- 2. ¿Cuál es el propósito del Producto -> Limpiar en Xcode?
- 3. Usos correctos de const_cast <>
- 4. ¿Es const_cast <const Type*> alguna vez útil?
- 5. ¿Cuál es el significado del token <?> en Java?
- 6. ¿Cuál es el propósito del pase indefinido?
- 7. ¿Cuál es el propósito del archivo vshost.exe?
- 8. ¿Es const_cast seguro?
- 9. ¿Cuál es el propósito del prototipo?
- 10. ¿Cuál es el propósito del transformador IdentityT?
- 11. ¿Cuál es el propósito del doble implicar?
- 12. ¿Cuál es el propósito del control VisitorIdentification?
- 13. ¿Cuál es el propósito del modificador -m?
- 14. ¿Cuál es el propósito del uso?
- 15. ¿Cuál es el propósito del método Thread.SpinWait?
- 16. ¿Cuál es el uso del tipo Nullable <bool>?
- 17. ¿Cuál es el propósito de allocator_traits <T> en C++ 0x?
- 18. ¿Tiene <script><!--//--></script> tiene un propósito moderno?
- 19. ¿Cuál es el propósito del secreto del cliente en OAuth2?
- 20. ¿Cuál es el significado de <#= #>
- 21. ¿Cuál es el punto del atributo <option> "etiqueta" dentro de <select>?
- 22. ¿Cuál es el propósito de una función miembro volátil en C++?
- 23. ¿Cuál es el propósito de la palabra clave 'volátil' en C#
- 24. ¿Qué es <span></span> elemento?
- 25. ¿Cuál es el propósito de <meta name = "MSSmartTagsPreventParsing" content = "TRUE">?
- 26. ¿Cuál es la diferencia entre <% %> y <%=%>?
- 27. propósito para páginas <EnableEventValidation = "false">
- 28. ¿Cuál es el tamaño de un Nullable <Int32>?
- 29. ¿Cuál es la diferencia entre <%# %> y <%= %>?
- 30. ¿Cuál es el propósito del detector en WebSphere MQ?
¿Estás preguntando sobre la conversión de 'const volátil' a' volátil' u otra cosa? –
Como siempre, publicar algún código ayudaría. –
Se eliminó la etiqueta C porque el lenguaje C no tiene 'const_cast <>' –