const char, const char*, char* const

来源:互联网 发布:爬虫软件的作用 编辑:程序博客网 时间:2024/05/03 04:11

C++ Primer(第4版) 习题7.39

 

解释一下每组声明中的第二个函数声明所造成的映像,并指出哪些不合法

(b) int calc(char*, char*);

      int calc(const char*, const char*);

(c) int calc(char*, char*);

     int calc(char* const, char* const);

 

(b)中第二个声明的效果是:声明了一个重载的calc函数

(c)中第二个声明是对第一个声明的重复声明。因为当形参以副本传递(即按值传递)时,不能基于形参是否为const来实现函数重载。

 

const char与char const相同,都是都表示标识一个char的变量不能改变它的值,例如:
const char a = 'a'; //a变量就只能够是'a'了,不能再改变它的值

const char* p1 = &a;
char* const p2 = &a;
*p1不能改变;
p2不能改变;
主要看待究竟const是否修饰*号(即*号是否在const后面)就行,如果修饰,则代表是*p是常量,如果不修饰则p是常量。
所以char const * p与const char*相同,因为*号在const后面。

注意:常量规定是在编译时候检测的,运行时候是可以改变的,例如上面的*p1为常量,但是可以赋值p1=&b,其中b='b';那么*p1的值也会变成'b'了。

 

然后在回顾上面的习题:

(A) int calc(char*, char*); 形参为指针变量

  (B) int calc(const char*, const char*);   形参为常量变量,指针能改变,指针所指向的变量不能改变,不同于(A)

  (C) int calc(char* const, char* const);   形参为常量指针,指针不能改变,指针所指向的变量能改变,相同(A)

 

 

const char*, char const*, char*const

把一个声明从右向左读。

char * const cp; ( * 读成 pointer to )
cp is a const pointer to char

const char * p;
p is a pointer to const char;

char const * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。

原创粉丝点击