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

问题描述:

在多线程的情况下,我有这样的方法:等待状态改变的方法应该是const吗?

bool WaitForChange(time_duration WaitTime) const; 

此方法将等待或者直到对象的状态已经改变,返回真,或直到超时超时(你怎么说? )并返回false。

我的直觉是,const是为了防止方法本身不需要的副作用,所以这很好。但是,再次,某些用户可能会认为该状态不能改变,因为该方法被声明为const。该用户是愚蠢的,还是我应该使方法非const以避免混淆?

+0

你还等什么?条件变量或睡眠轮询? – nos 2010-03-26 14:13:47

+0

我正在使用'boost :: condition_variable'来等待和'boost :: mutex'进行锁定。 – 2010-03-26 14:19:04

通过声明方法为const,你说“调用此方法不会改变对象的状态。”这是(希望)是真实的。所以让它成为常量。

如果有人认为,常量意味着“这个方法被调用时,没有其他人可以改变对象状态”,而不是那个人错误的。

我投给constness。

本身并不能改变什么方法,只是等待......

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

bool WaitForChange(time_duration WaitTime) volatile 

const意味着对象的状态是整个函数调用一样的,所以我不会用它。另一方面,volatile向编译器指出,只要访问成员,就应该重新获取成员,如果您正在寻找更改,这可能是您想要的。

+0

-1你把语法混淆成习惯用法。 'const'保证函数不会“修改被调用的对象的状态”。那只是别的。只有当“一个实体的价值被超语言的手段改变时才需要”volatile“,例如,一个实时时钟。 (这两个引用来自Stroustrup,http://www2.research.att.com/~bs/glossary.html) – egrunin 2010-03-26 15:44:10