mutable keyword

Namespace via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 20 11:49:09 PDT 2016


On Friday, 20 May 2016 at 18:42:44 UTC, Ali Çehreli wrote:
> On 05/20/2016 10:28 AM, Namespace wrote:
> > On Thursday, 19 May 2016 at 23:21:14 UTC, Jonathan M Davis
> wrote:
> >> On Thursday, May 19, 2016 20:44:54 ciechowoj via
> Digitalmars-d-learn
> >> wrote:
> >>> Is there D equivalent of C++'s mutable keyword? Like the
> one that
> >>> allows to modify a field of struct from constant method. Or
> some
> >>> alternative solution?
> >>
> >> No. D's const and immutable provide no backdoors.
> >
> > But you can cheat:
> > ----
> > int* _id;
> >
> > struct A
> > {
> >      int id = 0;
> >
> >      this(int id)
> >      {
> >          this.id = id;
> >          _id = &this.id;
>
> Point taken but considering that D structs are freely movable 
> value types, I don't think that's a valid D program. The spec 
> does ban self-referencing structs but I think it also bans the 
> code above in spirit. :)
>
> >      }
> >
> >      void change() const
> >      {
> >          (*_id)++;
> >      }
> > }
> >
> > void main() {
> >      import std.stdio;
> >
> >      A a = A(42);
> >      a.change();
> >
> >      writeln(a.id);
> > }
> > ----
>
> Ali

Also works for classes. ;) It's valid as far as I can tell.


More information about the Digitalmars-d-learn mailing list