2011-11-08 24 views
5

¿Por qué un objeto volatile no puede llamar a una función miembro que no es volatile?por qué un objeto volátil no puede llamar a la función miembro no volátil

En caso de const, tiene sentido que llamar a una función miembro no viola la constconstness del objeto y por lo tanto está prohibido. Pero ¿por qué en el caso de volatile?

+1

Porque está tratando de violar la corrección de la volatilidad ... –

+2

y acabo de ver el anagrama –

Respuesta

4

En el caso de const, tiene sentido que llamar a una función de miembro no const viole la consistencia del objeto y, por lo tanto, está prohibido. Pero ¿por qué en el caso de volátiles?

Pasa lo mismo con volátiles. Volátil significa que cada acceso a un objeto es un efecto secundario visible y no puede eliminarse. Si llama a un método no volátil en un objeto volátil, violaría esta propiedad (porque el método no volátil trataría el objeto solo como un objeto normal). Por lo tanto, es imposible.

2

El calificador volatile funciona de la misma manera que const. Para ver lo que se puede hacer gracias a esto, eche un vistazo a this Alexandrescu article. Ese artículo también debe darle alguna idea sobre el por qué.

+0

es un artículo de 2001 y todo lo que leo ahora es personas que aconsejan evitar la volatilidad para la sección crítica/multiproceso y prefieren usar mutexes . Por ejemplo: https://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive – Nikko

+0

@Nikko: Parece que no lo hiciste Lea más que el título del artículo al que se hace referencia en la respuesta. Lee el artículo completo. – ybungalobill

4

de la norma:

7.1.5.1. Si se intenta referir a un objeto definido con un tipo codificado volátil mediante el uso de un valor l con un tipo codificado no volátil , el comportamiento del programa no está definido.

Supongo que su compilador publica un error para evitar el comportamiento indefinido. La norma que lo establece debe ser motivo suficiente.

+0

Creo que la pregunta es "por qué" –

+0

buen hallazgo de las especificaciones. – iammilind

+0

@ TomalakGeret'kal porque el estándar lo dice :) –

Cuestiones relacionadas