On Wednesday, 17 February 2016 at 18:16:54 UTC, Ola Fosheim
Grøstad wrote:
On Wednesday, 17 February 2016 at 17:47:02 UTC, Jonathan M
Davis wrote:
definitely sucks. But interestingly, the more I've used D, the
less happy I've been with C++'s const. It just has too many
holes. In particular, the fact that it's not transitive is
What you could consider in C++ is to fully encapsulate your
field values and use member functions to access them. Which is
considered good modelling anyway.
So if you access a member as "get_child() const", you return a
const reference, which makes it transitive.
As soon as you start using pointers or containers or pointers or
anything like that, pretty quickly, you can get situations like
where the container is const, but its elements aren't. So, you
may not be able to mutate the stuff that's directly a member of
the class, you can still mutate stuff that it refers to or even
owns. D doesn't allow that, which I think is a definite
improvement. If you return a reference or pointer to a member
variable from a const member function in D, it's const through
and through with no holes, and I think that that is unequivocally
a good thing.
Where things get annoying is the type of situation where you'd
mark something mutable in C++, since those just don't work at all
in D. You're forced to not use const or redesign what you're
doing so that it doesn't need mutable (which usually means not
using const).
- Jonathan M Davis