C++关键字Const的用法小结
来源:互联网 发布:安卓服务器端开发java 编辑:程序博客网 时间:2024/06/03 01:43
回忆起之前学习的C++内容,发现很多东西都忘光了,看来语言都一样,如果不用的话很快就能忘记。于是开始重拾这个我很感兴趣的语言,于是准备一些专题来进行复习。今天的专题就是Const关键字专题:
1.const变量(const int i)
2.指向常量的指针(const int *pi)
3.指针常量(int *const pi)
4.指向常量的指针常量(const int *const pi)
5.const引用(const int &pi)
1.const变量
定义const变量,因为在被定义以后就不能被修改,所以在定义的时候必须初始化,如:
const string Hi = "hello world";
const int i,j = 0;//error,i 没有被初始化
ps:与其他的变量不同,除特别说明,const变量在定义该变量的文件的局部变量,如果要使const变量能够在其 他文件中被访问,必须显示指定为extern,如:
file.a: extern const string hi = "hello";
file.b: extern const string hi;
cout<<hi<<endl;
2.指向常量的指针
在定义指针的语句的类型前加const,表示指向的对象是常量,如:
const int a = 28;//a 为常量
const int *pi = &a;//pi为指向常量的指针
*pi = 88;//不能通过*pi来修改变量a
a = 88;//a为const变量,不能修改
int a = 38;
const int *pi = &a;//pi为指向常量的指针
*pi = 88;//error,因为pi为const指针,所以不能通过间接访问来修改
a = 88;//ok,因为a不是const类型
//不能把一个const变量的地址赋给一个普通的非const变量指针,如:
const int a = 28;//a为常量
int *pi = &a;//error,a为常量,而pi非const,故初始化错误
//不能使用void *指针保持const变量的地址,而必须使用const void *类型的指针来保存,如:
const int a = 34;
const void * cpv = &a;
void *cpi = &a;//error
3.指针常量
在指针定义语句的指针名前加上const,这样表示指针本身是常量,如:
char *cosnt ptr = "abcd";//指针常量定义
pi = "dcba";//error,pi本身为常量,不能修改
*pi = 'a';//ok,pi所指向的内存单元可以修改
*pi++ = 'b';//error,pi本身不能修改
PS:不能把常量的地址赋给指针常量,如:
const int a = 45;
int *const pi = &a;//error,因为*pi是合法的,但a本身不能修改,所以冲突
4.指向常量的指针常量
定义指向常量的指针常量,如:
int ai;
const int ci = 7;
const int *const pi = &ai;
const int *const cpi = &ci;
cpi = &ai;//error,cpi为常量,不能修改
*cpi = 78;//error,cpi所指向的内容是常量,不能修改
ai = 88;//ok
5.const 引用
const 引用是指向常量的引用,如:
const int i = 1024;
const int & j = i;//ok
int &k = i;//error,k为普通引用
tips:
(1)const 引用可以初始化为不同类型的变量或初始化为右值,如:
int i = 42;
const int &r = 42;//初始化为右值
const int &j = r+i;//初始化为不同类型
(2)非const引用却不可如此初始化,如:
int i = 42;
int &j = i;//error,不能初始化为右值
int &k = i+j;//error,不能初始化为不同类型
ps:
double i = 3.1445;
int &j = i;//error,对j的修改不能改变i
小结:非const引用只能与相应的引用类型相绑定,而const引用则可以绑定到不同类型或者右值。
Final PS:
对于tpyedef和指针,如下声明:
typedef string *pstring;
const pstring cstr;
这两句话从表面上理解cstr的真实类型是const string *cstr;但是实际情况并不是这样而应该是string *const cstr;又如下面的声明:
string s;
typedef string *pstring;
const pstring cstr1 = &s;
pstring const cstr2 = &s;
string *const cstr3 = &s;
cstr1,cstr2,cstr3的真实类型均为:string *const指针常量
- C++关键字Const的用法小结
- C++ 关键字 const 的用法小结
- C++const 关键字小结
- C语言关键字const的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- C语言中const关键字的用法
- const关键字的用法
- const关键字的用法
- const关键字的用法
- Const关键字的用法
- const关键字的用法
- const关键字的用法
- const关键字的用法
- const关键字的用法
- 黑马程序员-C语言const关键字的使用小结
- ListView与TreeView的一点心得
- 淘宝最新商品
- 青年男女的爱情宝典(未婚必看)
- 判断两线段是否相交
- 通过字符串名称来获取接口的class对象
- C++关键字Const的用法小结
- spring scope=prototype
- hibernate笔记
- 使用vsftpd让匿名用户可以具有上传、下载、删除权限
- window.showModalDialog打开页面向自身提交
- linux修改mac
- log4j笔记
- php5 mysql5
- 好久没有上来写文了。。。