代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

等待状态更改的方法应该是常量吗?

  •  7
  • Björn Pollex  · 技术社区  · 14 年前

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

    bool WaitForChange( time_duration WaitTime ) const;
    

    这个方法要么等到对象的状态改变并返回true,要么等到超时超时(你怎么说呢?)然后返回false。

    我的直觉是 const 是为了防止方法本身产生不必要的副作用,所以这很好。但是,同样,一些用户可能认为的状态不可能更改,因为方法已声明 康斯特 . 那个用户是愚蠢的,还是我应该让这个方法- 康斯特 为了避免混淆?

    3 回复  |  直到 14 年前
        1
  •  10
  •   Sebastian    14 年前

    通过将方法声明为const,您会说“调用这个方法不会改变对象的状态。”这是(希望)正确的。那就让它成为常量吧。

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

        2
  •  4
  •   Viesturs    14 年前

    我投赞成票。

    方法本身不会更改任何内容,只需等待…

        3
  •  0
  •   AshleysBrain    14 年前

    如果您正在等待查看对象成员是否已更改…挥发性的呢?

    bool WaitForChange( time_duration WaitTime ) volatile
    

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