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只能属于前面的类型。
- const char & char const
- const char* char*const
- const char*,char *const,const char*const
- const char*,char *const,const char*const
- const char*, char const* and char *const
- const char*, char const* and char *const
- const char* ; char const *; char* const;
- const char*, char const* and char *const
- 关于const char*, char const*, char*const
- const char*, char const*, char*const
- const char, const char*, char* const
- const char * char const * char * const
- const char*, char const*, char*const
- const char*, char const*, char*const
- const char*, char const*, char*const
- const char*, char const* and char *const
- const char*, char const*, char*const区别
- 区分const char*, char const*, char*const
- 预编译头 error C1010
- 配置节处理程序时出错,未能加载文件或程序集
- MSDN出现“语法错误”
- Unicode和ASCII:字符,宽字符和c,宏定义 _TEXT () _T()
- Android(2.Activity初步)
- const char, const char*, char* const
- static 静态局部对象、static类成员、命名冲突与static修饰符
- 激动,闲置1年的ARM终于动起来了
- size_t&loff_t(2.6.32)
- 复制控制:复制构造函数、赋值操作符、析构函数
- 总线:地址总线,数据总线,控制总线
- Direct3D中的HLSL
- linux 网络配置
- VC多模块程序设计与发布需要注意的细节(zhuanzai)