const的用法

来源:互联网 发布:linux exec < > 编辑:程序博客网 时间:2024/05/19 03:42

首先要说明的是,const是限定符,被他限定的的东西都被赋予了不能改变的意义,也就是常量,这也就意味着,const这个限定符可以和变量,指针,引用,函数等等一起使用。

还要说明的是,看完这篇博客,不能是你立刻的踏上人生巅峰,赢取白富美,变成高富帅。要想精通const的用法,还是看书——c++ primer和多多的练习。

上面也说了,const可以和那么多的东西发生关系,那么我们一个一个的来讲解。

1.const和变量

在c++中,声明一个变量:数据类型 变量名;

一旦和const发生关系,这个变量就变成了一个常量,也就是他的值不能在改变了。

例如:const int i=0; i=9;//这里就会报错,因为视图改变i的值。

还要注意的是 const对象必须初始化!!!

cosnt对象只能执行操作,不能改变const限定的值!!

2.const 和引用

2.1 啥是引用?引用就是给变量起来一个绰号或者别名。

例如:int i=0; int &j=i;//定义了一个引用j,j是i的引用。

但是要注意,引用必须要初始化!

2.2对常量的引用。

首先,我们定义一个常量 const int i=9;

然后我们定义一个对常量的引用:const int &j=i;

j++;//错误,因为这是改变常量。

int &j=i;//错误,因为,常量i被一个非常量引用。

2.2常量引用

这个称呼可以有,但是严格来说,这是错的。因为,引用本身不是一个对象,因此,就不会存在常量的引用。我们没有办法放引用恒等不变。引用的对象是常量还是非常量可以决定其所参加的操作,但是不会影响到引用和对象本身。

3.指针和const

3.1指向常量的指针

const int i=0;

const int *j=&i;//这就是指向常量的指针。

这个怎么理解,在看上面的表达式中,我们采取从右向左的看。首先,找到变量j,这个j是一个指针,什么样的指针呢?指向一个int 常量的指针。

我们要注意,指向常量的指针可以用常量来初始化,也可以用非常量初始化。例如:

int i=9;

const int *j=&i;

注意,指针的类型和指向的类型应该是相同的!!

3.2常量指针

const int i=9;

int *const j=&i;

在这里我们和上面的是一样的。首先,从变量j开始,前面有const修饰,他是一个常量,接着往左看,他的类型是一个指向整形的指针。

这里有一个更深的含义,将const放在*的后面,表示:不变的应该是这个指针j,而不是指向的对象。

还有,在这里,必须使用常量来初始化。

3.4顶层const

顶层const就是常量指针,底层const就是指向常量的指针。

4.const和函数

4.1 成员函数

在类的设计中,类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。,也就是这个函数只能读入数据,不能改变数据。

在设计类时,一个原则就是对于不改变数据成员的成员函数都要在后面加const,而对于改变数据成员的成员函数就不加const。

所以const关键字对成员函数的行为作了更加明确的限定:

有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。 

4.2 cosnt形参

1.如果顶层const是形参时,传给他常量对象或者非常量对象都可以。

2.在函数重载的时候,如果一个函数的形参时顶层const,另一个函数的形参不是顶层const,在重载的时候,他们两个函数是同一个函数,不会加以区别。


最后要说的,const的熟练使用,会对编程有很大帮助,能够让你的代码更加的完美。

0 0
原创粉丝点击