c++中const用法总结

来源:互联网 发布:ubuntu全中文包 编辑:程序博客网 时间:2024/05/18 01:54

一、const常量对象(最基本用法)

由const修饰的对象,即是一个常量,可以参与任何不会改变其值的操作。

const int Example=1024;//Example是一个值不可改变的常量

使用const常量的注意事项:

1、尽量以const代替#define;

2、const对象仅在文件内有效,即不同文件中的同名const是互相独立的、不同的两个量;

3、(与2相反的做法)不同文件中的const对象前面有extern修饰时,表示它们是同一个const对象。


二、const的引用(即有一个常量,然后用一个引用去绑定它)

用一个引用去绑定一个const常量时,此引用也必须是const修饰的。这种引用不能用于修改它所绑定的值。

const int Example=1024;//一个常量const int &ReExample=Example;//引用也必须由const修饰。但不是说此引用是一个常量,因为引用不是对象,不存在“变量”“常量”之说

常量引用注意事项:

1、允许常量引用绑定非常量对象、表达式。即:一个常量的引用必须是常量引用,而一个常量引用绑定的对象不一定是常量。


三、指向常量的指针

即在*左边有const修饰的指针。指向的不一定是个常量:

1、当指向常量的指针指向的是一个常量:

const int Example=1024;//一个常量const int *PtExample=&Example;//则指向它的指针必须由const修饰。指针的值可以改变。

2、当指向常量的指针指向的是一个变量:

int Example=1024;//一个变量cosnt int *PtExample=&Example;//含义是不能通过该指针去改变此变量的值,但可以通过其他途径改变。指针的值可以改变。

总结:指向常量的指针蕴含的意思是:不能通过此指针去改变它指向的对象的值,但是指针本身是可以改变值的


四、指针本身是个常量(常量指针)

即在*右边有const修饰的指针。指向的也不一定是个常量。不论指向的是变量还是常量,该指针的值不可改变,将一直指向那个对象。

int Example=1024;//一个变量int *const PtExample=&Example;//PtExample将一直指向Exampleconst int Example=1024;//一个常量int *const PtExample=&Example;// Pt是指向常量对象的常量指针

五、const形参和实参

1、非指针、引用的const形参:

void fcn(const int i) //fcn函数的形参i是const的,<span style="color:#FF0000;">仅</span>表示在fcn函数体中,不能去改变i的值,否则报错

但是,在调用fcn函数时所传入的实参,可以是const的,也可以不是const的。

因此,其实void fcn(const int i)和void fcn(int i)是几乎等价的,唯一区别是在前者的函数体中不能改变i的值。

2、const修饰的指针形参、引用形参:

含义与1是一样的。值得牢记的是:当形参里有指针或引用时,最好都用const去修饰。原因:

a、提高代码的健壮性,避免;

b、const修饰的形参既可以接受const实参,也可以接受非const实参,提高了接受范围。


六、类的常量成员

1、常量数据成员

在设计一个类时,将某个数据成员声明为const的,表示此数据成员的值不允许被修改,任何类内、类外函数只可以读取它的值,但不可以改变它。

声明格式与普通的常量声明相同。

2、常量函数成员

在设计一个类时,将某个函数成员声明为const的,表示该函数只能读取调用它的实例的内容,而无权修改它们。

声明时,const放在尾部,即参数表的后面:

int fcn(int i) const {}
非内联函数一般类内声明,类外实现。类外实现时此函数也要加const关键字。



0 0
原创粉丝点击