On Tue, 20 Jan 2015 09:29:45 +0000
qqiang via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

> I am writing a tree data structure, and I have the following code:
> 
> ```D
> final class Node {
>      private {
>       int val_;
>       Node parent_;
>       Node left_;
>       Node right_;
>      }
> 
>      @property
>      const(Node) maximum() const {
>       auto ret = this;
>                       
>       while (ret.right_) {
>           ret = ret.right_;
>       }
>                       
>       return ret;
>      }
> }
> ```
> 
> It failed to compile and complaint that `cannot modify const 
> expression ret`。
> 
> Since `ret` is just a binding to a const class object, why can't 
> I rebind it to another const class variable?
> 
> Must I use pointers to cope with this?
Jonathan explains it very well. i can add the only thing: don't use
`const` until you forced to. ;-) C++ programmers tend to "help
compiler" with const methods and so on. just don't do that in D until
you become friends with D constness.

sure, you can cast `const` away in your code, but using `cast` is a
good sign of taking the wrong way.

Attachment: signature.asc
Description: PGP signature

Reply via email to