Lies in education [was Re: The "loop and a half"]
On 12/10/2017 06:39, Grant Edwards wrote:
> On 2017-10-11, Gregory Ewing <greg.ewing at canterbury.ac.nz> wrote:
>> Neil Cerutti wrote:
>>> I dig
>>> const qualifiers, even though I'm comletely fine with their
>>> absence from Python.
>> Out of curiosity, do you have any insights into why you
>> like them in C++, if you don't miss them in Python?
> I like them in C because it allows the linker to place them in ROM
> with the code. It also _sometimes_ provides useful diagnostics when
> you pass a pointer to something which shouldn't be modified to
> something that is going to try to modify it.
It's one of these features that on paper sound good. In practice, it's
just useless extra clutter. It's used to:
(1) Define named constants; except (in C) they can't be used like
constant expressions, you can take their addresses, and accidentally or
maliciously change their values.
(2) Declare data to be put into read-only memory as you say. That's fine
with a 'const int * p', but what about a 'int * const p'? (Or is it the
other way around? Whatever...). Or any other hybrid type where some
elements are const and some aren't.
(3) Pass data that is supposed to be read-only, but with any even
slightly complex type, it won't work (the head of a linked list for
example, where the node elements need to be writeable). It gives a false
sense of security.