Actually, the const keyword (and other type modifiers, such as volatile and mutable) can go before or after the data type, just as data type keywords can go in any order. That is, these are all equivalent:
Code:
const long int *x;
long int const *x;
int long const *x;
long const int *x;
However, standard practice is to put const and other similar keywords first, followed by the data type.
Also note that const before an asterisk (*) or ampersand (&) in a pointer or a reference is not the same as a const afterwards. Before an asterisk, it makes a pointer-to-const (i.e., you can't modify the actual data that the pointer references); afterwards, and you get a constant pointer (i.e., you can't reassign the pointer to something else). The first form is most commonly used:
There's rarely a need to use a constant pointer: