В многопоточном сценарии у меня есть метод как это:
bool WaitForChange( time_duration WaitTime ) const;
Этот метод ожидает или пока состояние объекта не изменило и возвращает true, или пока тайм-аут не испытывает таймаут (как сказать это?) и возвращает false.
Моя интуиция, это const
должен защитить от нежелательных побочных эффектов самого метода, таким образом, это прекрасно. Но с другой стороны, некоторый пользователь мог бы думать, что состояние можения не изменилось, так как метод объявляется const
. Тот глупый пользователь, или если я делаю метод не -const
для предотвращения беспорядка?
Объявляя метод как const, вы говорите: «Вызов этого метода не меняет состояние объекта». Это (надеюсь) правда. Так что сделайте это const.
Если кто-то думает, константность означает: «Пока этот метод вызывается, никто другой не может изменить состояние объекта», но этот человек ошибается.
Если вы ждете, чтобы увидеть, изменились ли члены объекта ... как насчет volatile?
bool WaitForChange( time_duration WaitTime ) volatile
const
подразумевает состояние объекта объект одинаков во всем вызове функции, поэтому я бы не стал его использовать. volatile
, с другой стороны, указывает компилятору, что элементы должны повторно выбираться при каждом обращении к ним, что, вероятно, именно то, что вам нужно, если вы ищете изменения.
Я голосую за постоянство.
Сам метод ничего не меняет, просто ждет ...