Read it backwards...
-
int*- pointer to int -
int const *- pointer to const int -
int * const- const pointer to int -
int const * const- const pointer to const int
Now the first const can be on either side of the type so:
-
const int *==int const * -
const int * const==int const * const
If you want to go really crazy you can do things like this:
-
int **- pointer to pointer to int -
int ** const- a const pointer to a pointer to an int -
int * const *- a pointer to a const pointer to an int -
int const **- a pointer to a pointer to a const int -
int * const * const- a const pointer to a const pointer to an int - ...
And to make sure we are clear on the meaning of const
const int* foo;
int *const bar; //note, you actually need to set the pointer
//here because you can't change it later ;)
foo is a variable pointer to a constant int. That is you change what you point to but not the value that you point to. Most often this is seen with cstrings where you have a pointer to a const char. You may change which string you point to but you can't changed the strings content. This is important when the string itself is in the data segment of a program and shouldn't be changed.
bar is a const or fixed pointer to a value that can be changed. This is like a reference with out the extra syntactic sugar. Because of this fact, usually you would use a reference where you would use a T* const pointer unless you need to allow null pointers.
=================================================================
typedef char *ASTRING;
const ASTRING astring;
The type of astring is char * const, not const char *. This is one reason I always tend to put const to the right of the type, and never at the start.
http://duramecho.com/ComputerInformation/WhyHowCppConst.html,const详解
http://www.cprogramming.com/tutorial/const_correctness.html,专家博客解释const

被折叠的 条评论
为什么被折叠?



