[Python-Dev] Re: [Python-checkins] python/dist/src/Include compile.h,2.38,2.39 parsetok.h,2.19,2.20 pyerrors.h,2.63,2.64 pythonrun.h,2.55,2.56 symtable.h,2.10,2.11

Tim Peters tim@zope.com
Wed, 11 Dec 2002 14:16:56 -0500


[Tim]
>> A non-broken compiler always allowd passing a
>>
>>     T
>>
>> actual argument to a
>>
>>     const T
>>
>> ...

[David Abrahams]
> I don't know if C differs from C++ in this respect, but in C++, const
> in a prototype argument list has no effect whatsoever (unless
> modifying the referent of a pointer or reference).

I meant T above to include cases like T = char*.

>  So:
>
>      void f(const int x);
>
> is identical to
>
>      void f(int x);

Not in the presence of

#define int char*

it's not.

> In fact, a very useful idiom is:
>
>      void f(int x); // prototype. No const; it communicates nothing
>                      // useful to the caller
>
>      ...
>
>      void f(const int x)  // implementation. I know I can always use x
>      {                    // and get the original argument value
>         ...
>      }

All seriousness aside, that's useful in C too, but rarely seen, since the
meaning of C code is always self-evident.

> ...
> There's a long discussion even now on comp.lang.c++.moderated about
> whether const-correctness is a dogma.

I prefer to think of it as a crock, except when I'm working on embedded C
applications that need to know which static data is ROMable.  So far that
hasn't happened.  We came close once at Dragon, until the vendor revealed
their compiler didn't support static data at all.

That said, I'm happy to add const decorations to Python's C API decls where
it helps C++ users, provided we get to stop about a thousand miles short of
making anyone truly happy.

compromise-is-the-art-of-spreading-misery-ly y'rs  - tim