DIP 1018--The Copy Constructor--Community Review Round 1

Rubn where at is.this
Sat Dec 22 03:37:22 UTC 2018


On Saturday, 22 December 2018 at 00:08:51 UTC, Boris-Barboris 
wrote:
> On Friday, 21 December 2018 at 21:40:23 UTC, H. S. Teoh wrote:
>> Shouldn't const be inout in this case?
>
> Just in case: it's not my code, it's from the DIP example 
> snippets.
> I was advocating for forbidden mutable copy source. Inout 
> indeed solves the boilerplate/combinatorial problem, but my 
> main conjecture was about readability, wich is harmed by 
> mutable source default.

The DIP goes over why const wasn't used for the source. Consider 
the following:

struct A {
     int* ptr;
}

Now to simulate the copy constructor:

A copy(ref const A a) {
     A result;
     result.ptr = a.ptr; // error can't convert `const int*` to 
`int*`
     return result;
}

Const is infectious and just causes more problems making it 
pretty much useless in the general case. It's only suitable for a 
very narrow use case. A lot of people using D avoid const 
entirely, except for really basic simple things involving 
primitive types.



More information about the Digitalmars-d mailing list