等待状态改变的方法应该是const吗?

7
在多线程场景中,我有一个像这样的方法:
bool WaitForChange( time_duration WaitTime ) const;

该方法会等待对象状态改变并返回 true,或者超时并返回 false。
我的直觉是,const 是为了保护方法本身不受意外副作用的影响,所以这样做是可以的。但是某些用户可能会认为由于该方法被声明为 const,对象状态不可能发生改变。那么这个用户是愚蠢的,还是我应该将该方法声明为非 const 以避免混淆呢?

你如何等待?使用条件变量还是睡眠轮询? - nos
我正在使用 boost::condition_variable 进行等待,并使用 boost::mutex 进行锁定。 - Björn Pollex
3个回答

10

通过声明方法为const,您表达了“调用此方法不会更改对象的状态。”这是(希望)正确的。因此,请将其设置为const。

如果有人认为,const表示“在调用此方法时,没有其他人可以更改对象状态”,那么这个人是错误的。


4

我支持使用const。

这个方法本身不会改变任何东西,只是等待...


0

如果你正在等待查看对象成员是否已更改... 那么volatile呢?

bool WaitForChange( time_duration WaitTime ) volatile

const 表示对象的状态在函数调用期间保持不变,因此我不会使用它。另一方面,volatile 表示成员在访问时应重新获取,这可能是您想要的,如果您正在寻找更改。


你把习惯用法和语法混淆了。 const保证该函数不会“修改调用对象的状态”。仅此而已。只有在“实体的值可以通过非语言手段更改;例如,实时时钟”时才需要volatile。(两个引号来自Stroustrup,http://www2.research.att.com/~bs/glossary.html) - egrunin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接