On May 31, 2011, at 10:54 AM, Peter Kasting wrote:

> On Mon, May 30, 2011 at 11:32 PM, Maciej Stachowiak <[email protected]> wrote:
> A linked list node or tree node could useful have const methods, which give 
> only const pointers/references to other nodes. If there is a reason const 
> references to DOM nodes or renew objects are not useful, it is not due to the 
> object graph participation itself, in my opinion.
> 
> Indeed.
> 
> The rule of thumb I use is that a const member function should only return 
> const-ref or pointer-to-const objects (whether as return values or 
> outparams).  This helps ensure that the method is logically const, not just 
> physically const, by preventing callers from using const methods to gain 
> handles they can use to modify supposedly-const objects.
> 
> It so happens that objects in trees/graphs tend to have functions that return 
> pointers to other objects much more frequently than do independent data 
> holders.  Thus Geoff's rule ends up approximating my rule, but is not 
> equivalent.
> 
> As to use of const in general, I would prefer to see more of it rather than 
> less, _assuming it is used only for logical constness_.  See Scott Meyers' 
> "Effective C++", item 3, for rationale.

I agree that const should be used for "logical constness". The rule should not 
be merely "doesn't alter any data members of this object" but rather "does not 
alter observable state of this object or vend any type of pointer or reference 
by which observable state of this object could be altered".

This explains both why mutable data members are ok (they are meant for 
cache/memoization purposes, and do not alter observable state) and why const 
methods returning non-const pointers to other objects in a mutually referencing 
graph are not.

Regards,
Maciej

_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to