通常你有这种情况:
对于每个API窗口,最多有一个C++窗口对象。
C++窗口对象不可复制(包括它不可复制)。
对于这种情况下,可以在C++对象接口来使用const
,以便让客户机代码由例如提供无状态变化的保证声明一些参数为const
。
但是,一旦一个或两个约束被删除,它就变成徒劳且无意义的练习。例如,考虑删除第二个约束,使C++对象可复制。这看起来似乎有道理,对待C++对象几乎就像shared_ptr
实例(销毁除外)。
但是任何const shared_ptr
都可以复制到非const
之一,因此任何非const
方法都可以很容易地调用。例如,shared_ptr::get
是const
方法,因此可以在const shared_ptr
对象上调用它。但其结果是T*
,即没有const
传播到结果,因为即使它是T const*
它不会真正限制客户端代码:客户端代码可能会将该const shared_ptr
复制到非const
之一,然后调用get
非const
实例。
尽管如此,与上述地方const
(或在您的情况下不存在的const
)可以被在限制称为API窗口上的操作的可能有用的方式使用的事实都注册就,并不意味着它这样做一定是个好主意。
特别是,表示窗口的对象通常是事件接收器,根据我的经验,事件不会与const
很好地混合。
但是,大多数程序员习惯于纯粹的检查员是const
。对于这种用法,只是提高代码的可读性,我会推荐const
方法。例如,返回窗口大小的检查员在我看来应该比const
更好。
同意。即使技术上可以做到这一点,也很难说它并没有违背“不变性”的概念。 – 2012-03-21 15:43:21
考虑到这一点,能够让函数使用“const Window&”参数知道这些函数只能看到窗口,而不是完全改变它是很有价值的。 – jcoder 2012-03-21 15:46:53