它是什么意思:对象的可观察状态?
我昨天在第41项的“Exceptional C ++”解决方案中阅读,并且有一个片段:
私人: void InvalidateArea(){area = -1; }
即使此函数修改了对象的内部状态,它也应该是const。为什么?因为此函数不会修改对象的可观察状态。我们在这里进行一些缓存,但这是一个内部实现细节,即使它不是物理常量,该对象在逻辑上也是常量。
推论:成员变量区域应声明为可变。如果您的编译器还不支持mutable,请使用const_cast of area_来编写这个并写一条注释,告诉下一个人一旦mutable可用就删除const_cast但是确实使函数为const ._
像往常一样感谢答案。
答案 0 :(得分:4)
可观察状态表示外部对象可以观察到的对象的状态。内部缓存仅更改对象的私有状态,但它不会对对象的用户产生任何可观察到的差异(除了访问速度等非功能性事项外)。
答案 1 :(得分:2)
在此上下文中,“可观察状态”表示 对象的用户是否可以直接或间接地看到某些内容。
如果使用代码不能,通过观察任何可访问的成员函数的返回值或任何可访问的数据成员的值,告诉具有area
或另一个值的对象之间的区别,而不是area
是不属于对象的可观察状态。
例如,如果OTOH使用代码可以调用成员函数,并且该函数的结果将根据area
的值而不同,那么area
将成为对象可观察状态的一部分。
答案 2 :(得分:1)
这意味着状态变量不能直接用于客户端代码或通过get函数。从客户端的角度来看,类实例不会改变。