References to const

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Nov 12 06:11:53 PST 2008


Max Samukha wrote:
> On Wed, 12 Nov 2008 00:59:18 -0600, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Jonathan M Davis wrote:
>>> Okay, I'm wondering if there is any way in D to have a reference to
>>> const.  As far as I can tell, if you use const on a reference, you
>>> get a constant reference to constant data.
>>>
>>> const A a1; const A a2 = new A(); A otherA = new A(); const A a3 =
>>> otherA;
>>>
>>> So, a1 points permanently to null.  You can't change what it points
>>> to (and of course you can't change null).  a2 points to an A which
>>> was constructed on assignment.  a2 can't be made to point to anything
>>> else and you can't change the value that it points to.  a3 points to
>>> another the same A as otherA does, but it can't be made to point to a
>>> different A and it can't alter the value that it points to (while
>>> otherA can be altered to point to a different A and you can use it to
>>> alter the value that it points to).
>>>
>>> What I'd _like_ to be able to do is have reference which I can alter
>>> such that it points to a different object but which does not allow me
>>> to alter what it points to.  In C++, you have
>>>
>>> const A* a1;  //variable pointer to a constant object. A* const a2;
>>> //constant pointer to a variable object const A* const a3;
>>> //constant pointer to a constant object
>>>
>>> From what I can tell, you can do 2 of those in D with pointers:
>>>
>>> const (A)* a1;  //variable pointer to a constant object. const (A*)
>>> a3;  //constant pointer to a constant object
>>>
>>> But I don't see how to get either a const pointer, so it lacks one of
>>> the three with pointers.  With references, however, it lacks 2 of the
>>> three from what I can tell.  It only has constant references to
>>> constant data.
>>>
>>> I'm hoping that I just don't understand well enough how const works
>>> in D, but right now, I don't see any way to get a variable reference
>>> to constant data.  The missing constant pointer to variable data and
>>> constant reference to variable data might be nice, but they don't
>>> matter anywhere near as much to me.
>>>
>>> Is there a way to have variable reference to constant data in D?  I
>>> just don't see it at the moment and it would be _really_ useful.
>> http://www.digitalmars.com/d/2.0/phobos/std_typecons.html#Rebindable
>>
>> Andrei
> 
> class Widget { int x; int y() const { return a; } }:
> 
> I'm not sure, if this example was intended to be compilable, but it
> won't because of a in y.

Ouch. Thanks for the bug report.

Andrei



More information about the Digitalmars-d mailing list