Is all this Invarient **** er... stuff, premature optimisation?

Me Here p9e883002 at sneakemail.com
Mon Apr 28 03:28:05 PDT 2008


Janice Caron wrote:

> 2008/4/28  <p9e883002 at sneakemail.com>:
> >  import std.string;
> > 
> >  int main( string[] args) {
> >     char[] a = cast(char[])args[0].toupper();
> 
> **** UNDEFINED BEHAVIOR ****
> (1) args might be placed in a hardware-locked read-only segment. Then
> the following line would fail
> (2) there might be other pointers to the string, which expect it never
> to change.
> 
> >     a[2..5] = "XXX";
> >     a = cast(char[])tolower( cast(string)a );
> >     writefln(a);
> >     return 0;
> >  }
> > 
> >  Finally. It works.
> 
> But not necessarily on all architectures, because of the undefined
> behavior. This is how you do it without undefined behavior.
> 
>     import std.string;
> 
>     int main( string[] args) {
>         string a = args[0].toupper();
>         a = a[0..2] ~ "XXX" ~ a[5..$];
>         a = a.tolower();
>         writefln(a);
>         return 0;
>     }

fred

-- 




More information about the Digitalmars-d mailing list