On Fri, Feb 10, 2006 at 11:30:30AM -0500, Jeremy Hylton wrote: > On 2/10/06, Guido van Rossum <[EMAIL PROTECTED]> wrote: > > OMG. Are we now adding 'const' modifiers to random places? I thought > > "const propagation hell" was a place we were happily avoiding by not > > falling for that meme. What changed? > > I added some const to several API functions that take char* but > typically called by passing string literals. In C++, a string literal > is a const char* so you need to add a const_cast<> to every call site, > which is incredibly cumbersome. After some discussion on python-dev, > I made changes to a small set of API functions and chased the > const-ness the rest of the way, as you would expect. There was > nothing random about the places const was added. > > I admit that I'm also puzzled by Jack's specific question. I don't > understand why an array passed to PyArg_ParseTupleAndKeywords() would > need to be declared as const. I observed the problem in my initial > changes but didn't think very hard about the cause of the problem. > Perhaps someone with better C/C++ standards chops can explain.
Well, it's counter-intuitive, but a direct result of how pointer equivalence is defined in C. I'm rusty in this part, so I will get some terminology wrong, but IIRC, a variable A is of an equivalent type of variable B if they hold the same type of data. So, a 'const char *' is equivalent to a 'char *' because they both hold the memory of a 'char'. But a 'const char**' (or 'const *char[]') is not equivalent to a 'char **' (or 'char *[]') because the first holds the address of a 'const char *', and the second the address of a 'char *'. A 'char * const *' is equivalent to a 'char **' though. As I said, I got some of the terminology wrong, but the end result is exactly that: a 'const char **' is not equivalent to a 'char **', even though a 'const char *' is equivalent to a 'char *'. Equivalence, in this case, means 'can be automatically downcasted'. Peter v/d Linden explains this quite well in "Expert C Programming" (aka 'Deep C Secrets'), but unfortunately I'm working from home and I left my copy at a coworkers' desk. -- Thomas Wouters <[EMAIL PROTECTED]> Hi! I'm a .signature virus! copy me into your .signature file to help me spread! _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com