在多线程场景中,我有一个这样的方法:
bool WaitForChange( time_duration WaitTime ) const;
此方法等待,直到对象的状态发生变化并返回true,或者直到超时超时(你怎么说?)并返回false。
我的直觉是,const
是为了防止方法本身产生不必要的副作用,所以这很好。但话说回来,一些用户可能会认为状态无法改变,因为该方法被声明为const
。该用户是愚蠢的,还是应该使方法非const
以避免混淆?
答案 0 :(得分:10)
通过将方法声明为const,您可以说“调用此方法不会更改对象的状态”。这(希望)是真的。所以让它成为常数。
如果有人认为,const-ness意味着“在调用此方法时,没有其他人可以改变对象状态”,而不是那个人错了。
答案 1 :(得分:4)
我投票支持constness。
该方法本身不会改变任何东西,只是等待......
答案 2 :(得分:0)
如果您正在等待对象成员是否已更改......那么volatile会怎样?
bool WaitForChange( time_duration WaitTime ) volatile
const
意味着整个函数调用中对象的状态是相同的,所以我不会使用它。另一方面,volatile
向编译器指示应该在访问成员时重新获取成员,如果您正在寻找更改,这可能就是您想要的。