const and immutable values, D vs C++?

Bastiaan Veelo Bastiaan at Veelo.net
Wed Dec 4 22:43:35 UTC 2019


On Wednesday, 4 December 2019 at 14:44:43 UTC, Ola Fosheim 
Grøstad wrote:
> When is there a noticable difference when using const values 
> instead of immutable values in a function body? And when should 
> immutable be used instead of const?
>
> f(){
>   const x = g();
>   immutable y = g();
>   ... do stuff with x and y …
> }

There is a difference I guess if g() returns a reference type and 
is an inout function. immutable y will only work if the reference 
returned is immutable.

Const is a promise to the rest of the code that you will never 
mutate it. Immutable is a promise by the rest of the code that it 
will never mutate.

Immutable is more powerful, allowing data sharing in overlapping 
slices and between threads without locks. Const is more 
versatile, allowing references to data regardless of its 
mutability.

So if g() always returns immutable, it’s best to receive it as 
such, not const. If it can be either, it must be received as 
const.

> I'm comparing D to C++ and I get the following mapping:

Does that make sense at all? D’s const is transitive, C++’s is 
not.

Bastiaan.



More information about the Digitalmars-d-learn mailing list