Должен метод, который ожидает изменения состояния быть константой?

В многопоточном сценарии у меня есть метод как это:

bool WaitForChange( time_duration WaitTime ) const;

Этот метод ожидает или пока состояние объекта не изменило и возвращает true, или пока тайм-аут не испытывает таймаут (как сказать это?) и возвращает false.

Моя интуиция, это const должен защитить от нежелательных побочных эффектов самого метода, таким образом, это прекрасно. Но с другой стороны, некоторый пользователь мог бы думать, что состояние можения не изменилось, так как метод объявляется const. Тот глупый пользователь, или если я делаю метод не -const для предотвращения беспорядка?

7
задан Georg Fritzsche 26 March 2010 в 14:48
поделиться

3 ответа

Объявляя метод как const, вы говорите: «Вызов этого метода не меняет состояние объекта». Это (надеюсь) правда. Так что сделайте это const.

Если кто-то думает, константность означает: «Пока этот метод вызывается, никто другой не может изменить состояние объекта», но этот человек ошибается.

10
ответ дан 6 December 2019 в 15:20
поделиться

Если вы ждете, чтобы увидеть, изменились ли члены объекта ... как насчет volatile?

bool WaitForChange( time_duration WaitTime ) volatile

const подразумевает состояние объекта объект одинаков во всем вызове функции, поэтому я бы не стал его использовать. volatile , с другой стороны, указывает компилятору, что элементы должны повторно выбираться при каждом обращении к ним, что, вероятно, именно то, что вам нужно, если вы ищете изменения.

0
ответ дан 6 December 2019 в 15:20
поделиться

Я голосую за постоянство.

Сам метод ничего не меняет, просто ждет ...

4
ответ дан 6 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: