On 3/12/23 08:09, Salih Dincer wrote:

> As someone who has used const very little in my life

You can live without 'const' until your code interacts with other people's code. For example, the following program works just fine:

struct S {
    int * p;

    void foo() {}
}

void bar(S s) {}

void main() {
    auto s = S();
    s.foo();
    bar(s);
}

Now you replace (or a user of your code replaces) 'auto' with 'const' and you will get 2 compilation errors:

    const s = S();
    s.foo();        // ERROR 1
    bar(s);         // ERROR 2

So, if your code will ever interact with other people's code it must be const-correct. If foo() is not mutating the object (including through the p member), it better be defined as 'const':

    void foo() const {}

And if bar() is not mutating the parameter, it better take as const:

void bar(const(S) s) {}

Now the code compiles.

You can (and should) use 'const' everywhere that you can because it increases the usability of code: Mutable, 'const', and 'immutable' variables can be used with code that takes by 'const'.

This is not the same with code taking by 'immutable'. It can only be used with 'immutable' variables.

Ali

Reply via email to