Должен ли метод, который ожидает изменения состояния, быть постоянным? - PullRequest
7 голосов
/ 26 марта 2010

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

bool WaitForChange( time_duration WaitTime ) const;

Этот метод ожидает либо до тех пор, пока состояние объекта не изменится и возвращает истину, либо до истечения времени ожидания (как вы это говорите?) И возвращает ложь.

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

Ответы [ 3 ]

10 голосов
/ 26 марта 2010

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

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

4 голосов
/ 26 марта 2010

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

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

0 голосов
/ 26 марта 2010

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

bool WaitForChange( time_duration WaitTime ) volatile

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...