I understand what const correctness means and my question is not about what const correctness is. So I am not expecting an explanation or C++-FAQ links for that.
My questions are:
const
in C and const
in C++? andQuotes from the respective standards which make the differences clear would be nice to have.
I regularly switch between C and C++ and I would like to know the important points that one should keep in mind while doing so.
I don't seem to remember the reason for these (special thanks if you can provide a reasoning) but from the top of my mind, I can remember:
char const*
in C++ but in C it can be char*
.What am I missing?
In addition to the differences you cite, and the library differences that Steve Jessop mentions,
char* p1;
char const* const* p2 = &p1;
is legal in C++, but not in C. Historically, this is because C originally allowed:
char* p1;
char const** p2 = &p1;
Shortly before the standard was adopted, someone realized that this
punched a hole in const safety (since *p2
can now be assigned a
char const*
, which results in p1
being assigned a char const*
); with
no real time to analyse the problem in depth, the C committee banned any
additional const
other than top level const. (I.e. &p1
can be
assigned to a char **
or a char **const
, but not to a char const**
nor a char const* const*
.) The C++ committee did the further
analysis, realized that the problem was only present when a const
level was followed by a non-const
level, and worked out the necessary
wording. (See §4.4/4 in the standard.)