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

时间:2010-03-26 14:04:55

标签: c++ const

在多线程场景中,我有一个这样的方法:

bool WaitForChange( time_duration WaitTime ) const;

此方法等待,直到对象的状态发生变化并返回true,或者直到超时超时(你怎么说?)并返回false。

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

3 个答案:

答案 0 :(得分:10)

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

如果有人认为,const-ness意味着“在调用此方法时,没有其他人可以改变对象状态”,而不是那个人错了。

答案 1 :(得分:4)

我投票支持constness。

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

答案 2 :(得分:0)

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

bool WaitForChange( time_duration WaitTime ) volatile

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