mutable keyword
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 20 11:42:44 PDT 2016
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
More information about the Digitalmars-d-learn
mailing list