Calls to struct methods and immutable

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Thu Nov 15 06:24:18 PST 2012


On 11/15/2012 03:06 PM, bearophile wrote:
>       void check() const pure nothrow {
>           immutable real p = a ^^ 2 + b ^^ 2;
>           assert(sqrt(p) < 10);
>       }

Is it appropriate to have 'nothrow' given that the assert could fail?

> Strive to write D code as much cast-free as possible, because
> they are dangerous.

The practical situation I'm dealing with is that the a struct gets built inside 
a function, based on data read from files.  Once the data has been written to 
the struct, it should never be changed again.

i.e.

struct Foo
{
      // contains a few different arrays of data
      void add( /* adds new data points to collection */) { ... }
}

auto makeFoo()
{
     Foo foo;
     foreach( /* lots of data */ )
         foo.add( /* new data point */ );
     return foo;
}

So, in practice, it seems like that function should cast it to immutable as it 
returns -- and this would be safe, no?

By the way, I should add -- I recognize I'm deluging the list with a bunch of 
questions in these last days, and I'm very grateful for the amount of advice you 
and others have been giving.  I hope it's not becoming too overwhelming or annoying!


More information about the Digitalmars-d-learn mailing list