On Wed, Dec 18, 2013 at 06:33:37PM +0100, Joseph Rushton Wakeling wrote:
> On 18/12/13 18:20, Timon Gehr wrote:
> >Well, 'const' attached to a method is simply the notation used for
> >attaching 'const' to the implicit 'this' parameter.
> 
> Sure, but if you see a method:
> 
>    struct Foo
>    {
>        const int bar() { ... }
>    }
> 
> ... the instinctive interpretation of that is "This is a method that
> returns a const int."  You soon learn your mistake, but once you
> have, the mental association between one form of const and the other
> makes sense, even if you don't appreciate the subtlety of the fact
> that it's referring to the implicit "this" parameter.
[...]

For this reason, it is better to write 'const' on the right side of the
function name than on the left:

        struct Foo
        {
                // Now it's clear(er) that 'const' refers to const(this)
                // rather than const(int).
                int bar() const { ... }
        }

And also to always write `const(int)` rather than the potentially
ambiguous `const int`. It may feel unnecessarily verbose at first, until
you have to distinguish between:

        const(int)[] func();
        const(int[]) func();
        int[] func() const;
        const(int)[] func() const;
        const(int[]) func() const;

then you begin to appreciate the notation. :)


T

-- 
Almost all proofs have bugs, but almost all theorems are true. -- Paul Pedersen

Reply via email to