Stepping back and looking at constness from another angle.

Regan Heath regan at netmail.co.nz
Fri Jun 8 23:49:16 PDT 2007


Derek Parnell Wrote:
> On Thu, 07 Jun 2007 18:42:03 -0400, Regan Heath wrote:
> 
> > Denton Cockburn Wrote:
> >> On Thu, 07 Jun 2007 16:25:21 +1000, Reiner Pope wrote:
> >> 
> >>> Another problem with const by default came to mind. Consider the
> >>> following code, with const-not-by-default:
> >>> 
> >>> void foo( ref const(char)[] c)
> >>> {
> >>>      c = c[1..$];
> >>> }
> >>> 
> >>> I would hate to see this in const-by-default, which would try to wrap a
> >>> const( ) around the whole type. To counter that, you would probably have
> >>> to write some mess like
> >>> 
> >>> void foo ( mutable( ref const(char)[] ) c ) {
> >>>      c = c[1..$];
> >>> }
> >>> 
> >>>    -- Reiner
> >> 
> >> Again, I'm also trying to understand this, knowing that things change a 
> >> lot over the course of the discussion. That being said, I thought the 
> >> current position is that by adding any other qualifier, such as ref, 
> >> const/scope/final is no longer automatically applied.
> > 
> > I thought so too.  As Don says; 'ref' is an alias of 'inout'.  It's ver
> > y purpose is to indicate a variable which is going to be modified.  Therefore it stands to reason that function parameters passed as 'ref' will be mutable by default. :)
> > 
> > Regan
> 
> I have to disagree Regan. 'ref' might mean that the passing mechanism is
> "by reference" but it does not necessarily mean that the access permission
> is 'allowed to change". Do not get parameter passing mechanics confused
> with access permissions.

You're dead right.  In fact 'ref' (a passing mechanic) is/has replaced 'inout' (signifying 'this reference is allowed to change') so it seems Walter/D is confusing the two.

Regan



More information about the Digitalmars-d mailing list