Thread overview | ||||||
---|---|---|---|---|---|---|
|
August 24, 2019 how to definition a non-const pointer that point a const var. | ||||
---|---|---|---|---|
| ||||
Hi: In C we can definition const int *ncp_to_cv; or int * const cp_to_ncv; How to do this in D. |
August 23, 2019 Re: how to definition a non-const pointer that point a const var. | ||||
---|---|---|---|---|
| ||||
Posted in reply to lili | On Friday, August 23, 2019 10:14:56 PM MDT lili via Digitalmars-d-learn wrote:
> Hi:
> In C we can definition const int *ncp_to_cv;
> or int * const cp_to_ncv;
> How to do this in D.
D uses parens to restrict how much of the type is const.
const int* - const pointer to const int
const(int*) - const pointer to const int
const(int)* - mutable pointer to const int
Similarly,
const(int*)* - mutable pointer to const pointer to const int
const(int)** - mutable pointer to mutable pointer to const int
D's const is transitive, so it's not possible to have a const pointer to a mutable type.
- Jonathan M Davis
|
August 24, 2019 Re: how to definition a non-const pointer that point a const var. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Saturday, 24 August 2019 at 05:03:43 UTC, Jonathan M Davis wrote:
> On Friday, August 23, 2019 10:14:56 PM MDT lili via Digitalmars-d-learn wrote:
>> Hi:
>> In C we can definition const int *ncp_to_cv;
>> or int * const cp_to_ncv;
>> How to do this in D.
>
> D uses parens to restrict how much of the type is const.
>
> const int* - const pointer to const int
> const(int*) - const pointer to const int
> const(int)* - mutable pointer to const int
>
> Similarly,
>
> const(int*)* - mutable pointer to const pointer to const int
> const(int)** - mutable pointer to mutable pointer to const int
>
> D's const is transitive, so it's not possible to have a const pointer to a mutable type.
>
> - Jonathan M Davis
As to const pointers to mutable types, it can be done in a library (Final in std.typecons). I don't know what the overhead is but I imagine it wraps it in a struct
|
August 24, 2019 Re: how to definition a non-const pointer that point a const var. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Max Haughton | On Saturday, August 24, 2019 12:48:33 AM MDT Max Haughton via Digitalmars-d- learn wrote:
> On Saturday, 24 August 2019 at 05:03:43 UTC, Jonathan M Davis
>
> wrote:
> > On Friday, August 23, 2019 10:14:56 PM MDT lili via
> >
> > Digitalmars-d-learn wrote:
> >> Hi:
> >> In C we can definition const int *ncp_to_cv;
> >>
> >> or int * const cp_to_ncv;
> >>
> >> How to do this in D.
> >
> > D uses parens to restrict how much of the type is const.
> >
> > const int* - const pointer to const int
> > const(int*) - const pointer to const int
> > const(int)* - mutable pointer to const int
> >
> > Similarly,
> >
> > const(int*)* - mutable pointer to const pointer to const int
> > const(int)** - mutable pointer to mutable pointer to const int
> >
> > D's const is transitive, so it's not possible to have a const pointer to a mutable type.
> >
> > - Jonathan M Davis
>
> As to const pointers to mutable types, it can be done in a library (Final in std.typecons). I don't know what the overhead is but I imagine it wraps it in a struct
You can create a wrapper struct that acts as a pointer and make it so that the struct can't be assigned to, making it emulate const, but you can't actually make it const, since that would make the wrapped pointer const as well. Personally, I think that const pointers to mutable data are useless anyway, but IIRC, there's a library somewhere on code.dlang.org that has a struct that tries to emulate such a pointer, since it gets brought up from time to time.
- Jonathan M Davis
|
Copyright © 1999-2021 by the D Language Foundation