Casting non-aliased mutable arrays to immutable in return values

Per Nordlöw via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 29 09:09:17 PDT 2017


Is it recommended to cast an unaliased array to `immutable` after 
it has been initialized?

The reason for asking is that I would like the following function

void[] rawReadNullTerminated(string path)
     @safe
{
     import std.stdio : File;
     auto file = File(path, `rb`);

     import std.array : uninitializedArray;
     ubyte[] data = uninitializedArray!(ubyte[])(file.size + 1);
     file.rawRead(data);
     data[file.size] = 0;     // null terminator for sentinel

     return data;                // TODO can we cast this to 
`immutable(void)[]`?
}

to have an immutable return type.

I'm aware of that I need to verify the contexts as UTF-8 if I 
want to treat it as text.


More information about the Digitalmars-d-learn mailing list