const?? When and why? This is ugly!

Burton Radons burton.radons at gmail.com
Sat Mar 7 20:14:37 PST 2009


Derek Parnell Wrote:

> On Sat, 07 Mar 2009 17:08:58 -0500, Burton Radons wrote:
> 
> > Am I going to become a broken record on this? Because
> > "invariant (char) []" is the string type, data that
> > is going to be mutable will always find its way into
> > that type in order to deal with an API which WILL use
> > string as its arguments, not writing out
> > "const (char) []". 
> 
> I'm starting to think that 'string' for function parameters should be a
> rare thing. For a function to insist that it only recieves immutable data
> sounds like the function is worried that it might accidently change data.
> And that sounds like a bug to me. It is shifting the responsibility to the
> caller for the data's integrity.
> 
> > It gives me no information about
> > the future of the object while removing the apparent
> > need for the gentleman's agreement. Therefore I have
> > no way of knowing what the actual pedigree of this
> > string I've been given has. It may be invariant, it
> > may be mutable.
> 
> But why would your function care about that? Let's assume your function's
> signature is 'const' for its parameters because it does not intend to
> modify any of them. If the caller passes invariant data then your function
> cannot modify the arguments. If the caller passes mutable data, the
> compiler won't allow your function to modify the parameters either, due to
> the const signature. So why is it important that the function should know
> the mutability of the passed data?

In my example the function's signature is like this:

   int cachedComputation (string x)
   {
      static int [string] array;

      return array [x] = hugeComputation (x);
   }

According to the strict interpretation of the standard I should be able to say that the contents of x will never be modified or destroyed, but because it's the default that's used everywhere in Phobos that forces everything to be casted to string before it can be used anywhere, I can't assume it has more weight than const.



More information about the Digitalmars-d mailing list