void fun(int a);
void fun(const int a);
不构成重载。
当一个参数类型是const或volatile时,在识别函数声明是否相同时,并不考虑const或volatile修饰符。(C++ Primer 3rd p371)
void fun(int *a);
void fun(const int *a);
构成重载,因为参数是不同的类型,前者指向整型的指针,后者是指向常整型的指针,是不同类型的指针。
void fun(int *a);
void fun(int *const a);
不构成重载,两者均是指向整型的指针,只是后者用const修饰了指针,所以不构成重载。