2010-03-26 11 views
7

En un escenario de multiproceso, tengo un método como este:¿Debería const un método que espera un cambio de estado?

bool WaitForChange(time_duration WaitTime) const; 

Este método espera o bien hasta que el estado del objeto ha cambiado y devuelve verdadero, o hasta que los tiempos de tiempo de espera a cabo (¿cómo se dice eso?) y devuelve falso.

Mi intuición es que const es para proteger contra los efectos secundarios no deseados del método en sí, así que esto está bien. Pero, de nuevo, algunos usuarios pueden pensar que el estado de la podría no haber cambiado, ya que el método está declarado const. ¿Es ese usuario estúpido, o debo hacer el método no const para evitar confusiones?

+0

¿Cómo esperas? variables de condición, o encuesta de sueño? – nos

+0

Estoy usando 'boost :: condition_variable' para esperar y' boost :: mutex' para bloquear. –

Respuesta

10

Al declarar el método como const, se dice "llamada a este método no cambia el estado del objeto." Esto es (con suerte) cierto. Entonces hazlo const.

Si alguien piensa, const -ness significa "Mientras se llama este método, nadie más puede cambiar el estado del objeto" que esa persona está equivocada.

4

Voto por constness.

El método en sí no cambia nada, sólo espera ...

0

Si está esperando ver si los miembros del objeto han cambiado ... ¿qué pasa con la volatilidad?

bool WaitForChange(time_duration WaitTime) volatile 

const implica el estado del objeto es el mismo en toda la llamada a la función, así que no lo usaría. volatile, por otro lado, indica al compilador que los miembros deben volver a buscarse cada vez que se accede a ellos, que es probablemente lo que desea si está buscando cambios.

+0

-1 Estás confundiendo idioma con sintaxis. 'const' garantiza que la función no" modificará el estado del objeto para el que se llama ". Eso, y nada más. 'volátil' solo se necesita cuando" una entidad puede cambiar su valor por medios extralingüísticos, por ejemplo, un reloj de tiempo real ". (Ambas citas de Stroustrup, http://www2.research.att.com/~bs/glossary.html) – egrunin

Cuestiones relacionadas