immutable(ubyte)[] to receive

bauss jj_1337 at live.dk
Thu Jan 20 10:19:37 UTC 2022


On Thursday, 20 January 2022 at 10:18:03 UTC, bauss wrote:
> On Thursday, 20 January 2022 at 09:38:55 UTC, Alexey wrote:
>>
>>     Buffer[] t ;
>>     t ~= cast(Buffer)"sdfsdfsdf";
>>     t ~= cast(Buffer)"sdfsdfsdf";
>>     immutable(Buffer[]) ti = cast(immutable)t;
>>
>
> This is undefined behavior.
>
> Since ti isn't really immutable.
>
> You can still modify the original buffer (t).
>
> You should use const instead of immutable and, that goes for 
> your functions too.
>
> They should receive const and not immutable.
>
> Summary:
>
> Mutable means: Anyone and anything can modify it.
> Immutable means: Nobody will modify it, not here and not 
> anywhere else. Initialization is only allowed, but not pointing 
> to anything that has mutable references.
> Const means: I promise not to modify it, but another mutable 
> reference might.
>
> In your example t is a mutable reference, where as ti is an 
> immutable reference.
>
> That's illegal and constitutes as UB (Undefined behavior)
>
> It would have been legal if you either used const or if you 
> made an immutable duplication of t with ex. t.idup.

Oh wait, I just noticed Buffer is an alias to an immutable array.

Ignore what I just said...


More information about the Digitalmars-d mailing list