pointers - inout-parameter - replace one const-handle with another -
in object, have array of const-handles object of specific class. in method, may want homecoming 1 of handles inout-parameter. here simplified example:
class {} class b { const(a) a[]; this() { = [new a(), new a(), new a()]; } void assign_const(const(a)* value) const { // *value = a[0]; // fails with: error: cannot modify const look *value } } void main() { const(a) a; b b = new b(); b.assign_const(&a); assert(a == b.a[0]); // fails .. } i not want remove const in original array. class b meant kind of view onto collection constant a-items. i'm new d coming c++. have messed const-correctness in d-way? i've tried several ways work have no clue how right.
how right way perform lookup without "evil" casting?
casting away const , modifying element undefined behavior in d. don't it. 1 time const, it's const. if element of array const, can't changed. so, if have const(a)[], can append elements array (since it's elements const, not array itself), can't alter of elements in array. it's same immutable. instance, string alias immutable(char)[], why can append string, can't alter of elements.
if want array of const objects can alter elements in array, need level of indirection. in case of structs, utilize pointer:
const(s)*[] arr; but won't work classes, because if c class, c* points reference class object, not object itself. classes, need do
rebindable!(const c) arr; rebindable in std.typecons.
pointers casting d const-correctness const-cast
No comments:
Post a Comment