码迷,mamicode.com
首页 > 其他好文 > 详细

const总结

时间:2015-08-25 23:57:51      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:c++   对象   应用   const   

const

const限定符将一个对象转换成一个常量,限定了其值不允许改变。


常变量

  int const val=5;//两种方法都可以;
  const int val1=6;//因为常量在定义后不能改变,所以定义时必须初始化;

任何企图修改val和val1的操作都会引起编译错误;


const引用


const应用是指向const对象的引用

不能将普通的引用绑定到const对象;

  const int r=10;
  const int &r1=r;//不能对r1赋值;
  int &r2=r;//错误;

const引用可以绑定到不同而相关的类型的对象或右值,非const只能绑定与该引用同类型的对象

  const int &r=42;//直接绑定到字面值常量
  
  double a=3.14;
  const int &r1=a;//注意,此后修改a的值r1并不会改变;

下面的情况也是可行的

  int i=10;
  const int &r=10;
  const int &r1=r+i;


指向const对象的指针


如果一个指针指向const对象则不允许用指针来改变其所指的值(其实const对象指针一经定义,就不允许用该指针修改其所指对象的值,若其指向的是非const对象,可以通过其他方法修改其所指向的值。)

其定义的形式为

const int *pt;//pt为指向int类型const对象的指针,pt并非const,而其指向的对象为const,因此定义时不用初始化

以下使用错误要避免:
1.可以给指针重新赋值使其指向另一个const,但不能通过指针修改其所指向的值

*pt=10;//错误

2.不能把一个const对象的地址赋给一个普通的非const对象的指针(可以把非const对象的地址赋给指向const对象的指针)

const int a=10;
int *b=&a;//错误

3.不能用void*指针保存const对象地址,必须使用const void*

const  int a=5;
const void *b=&a;//正确;
const *c=&a;//错误;


const指针


指针的类型为const,其值不能修改,必须在定义时初始化。

int a=0;
int *const pt=&a;//const指针

pt=pt;不能对其赋值即使是自己也不行;

可以使用指针修改其指向的值;


指向const对象的const指针


既不能修改指针指向的值也不能修改指针的指向(即指针中存放的地址值)

const int a=0;
const int *const pt=&a;//


下面的问题请注意:

typedef string *pstring中pstring实际上是指向string对象的const指针,而不是指向string类型的const对象的指针。

typedef string * pstring;
const pstring str=s;//假设string s="hello";

pstring const str2=s;
string *const str3=s;//以上三种定义其实相同!!!




版权声明:本文为博主原创文章,未经博主允许不得转载。

const总结

标签:c++   对象   应用   const   

原文地址:http://blog.csdn.net/u014245881/article/details/47982591

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!