const用法总结

C++ const详解

1.  @  const:


一、对于基本声明
const int r=100;  
//标准const变量声明加初始化,编译器经过类型检查后直接用100在
编译时替换
二、对于指针
1. 
int x=10; 
const int *r=&x;  
//指针
指向的内容是常量,r指向的内容不能够通过r改变,但如果指向的内容是非const(例如x),内容可以通过自己(x)改变,而且r指针可以改变,可以指向其它的整形.


*r=*r+1; //NO
 x++;    //YES
 r=&y;   //YES
2. 
int const *r=&x; 
//与1完全相同
3. 
int * const r=&x; 
//
指针指向是常量,不能修改去指向其它内容,但指向的内容可以修改
r=&y;   NO 
*r=*r+1;YES 
x++;YES
4.
const int * const r=&x;
//综合1、3用法,r是一个指向常量的常量型指针,指针指向不能改变,指针内容不能改变, 如果指向的内容是非const(例如x),内容可以自身改变
r=&y;NO
*r=*r+1;NO
x++;YES


三、对于类型检查
可以把非const对象赋予const指针,这样就不能改变.
但是不能把const赋给非const指针,除非先强制转换

const int x=100;
 int *p=(int*)&x; 
*p++;

四、对于函数
1.void Fuction1(const int r); //此处为参数传递const值,意义是变量初值不能被函数改变
2.const int Fuction1 (int); //此处返回const值,意思指返回的原函数里的变量的初值不能被修改,但是函数按值返回的这个变量被制成副本,能不能被修改就没有了意义,它可以被赋给任何的const或非const类型变量完全不需要加上这个const关键字
3.Class CX; //内部有构造函数,声明如CX(int r =0)
CX Fuction1 () { return CX(); }
const CX Fuction2 () { return CX(); }
Fuction1() = CX(1); //没有问题,可以作为左值调用
Fuction2() = CX(1); //编译错误,const返回值禁止作为左值调用
4.函数中指针的const传递和返回:
int F1 (const char *pstr); //作为传递的时候使用const修饰可以保证不会通过这个指针来修改传递参数的初值
const char *F2();//意义是函数返回的指针指向的对象是一个const对象,它必须赋给一个同样是指向const对象的指针
const char * const F3(); //比上面多了一个const,这个const的意义只是在他被用作左值时有效,它表明了这个指针除了指向const对象外,它本身也不能被修改,所以就不能当作左值来处理

五、对于类
1.首先,对于const的成员变量,只能在构造函数里使用初始化成员列表来初始化,试图在构造函数体内进行初始化const成员变量会引起编译错误。初始化成员列表形如:
X:: X ( int ir ): r(ir) {} //假设r是类X的const成员变量
注意:类的构造和析构函数都不能是const函数
2.建立了一个const成员函数,但仍然想用这个函数改变对象内部的数据。(函数不能修改类的数据成员)
//假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函数f( )来对这个r进行++r操作,代码如下
void X::f( ) const
{ (const_cast(this)) -> ++r; } //通过this指针进行类型强制转换实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值