C 中的C 关键字浅析
创始人
2024-06-21 22:10:30
0

C++语言中,然后就总结了许多C++关键字,如果不使用常引用、指针,则须用const_cast<>进行转,指向字符char的常指针经常用来表示字符串,像windows中的LPCSTR就是const char *。

1. 修饰常量

最基本的用法,用const修饰一个变量,表示这是一个常量,这种用法可以代替C语言里面的宏定义。注意要在声明时初始化,如果是类的数据成员,则在构造函数的初始化列表中初始化。

  1. const int a=999;    //定义了常量a,代替宏定义  
  2. //const int b;        //错误,常量定义时要初始化  
  3. extern const int c;    //外部定义的常量不用初始化了  
  4. int const d=0;        //与const int等价,写法习惯不同而已  
  5. const long e=0;        //同理,把int换成char、long、类是一样的  
  6.  
  7. class Cls  
  8. {  
  9. public:  
  10.     Cls(int a,int b):_a(a)    //常数成员要在初始化列表初始化  
  11.     {  
  12.         _b=b;  
  13.     }  
  14. private:  
  15.     const int _a;  
  16.     int _b;  
  17. }; 

2. 修饰引用,指针

对一个C++关键字的引用或指针要用常指针,也就是不能修改所引用、指向的变量。如果不使用常引用、指针,则须用const_cast<>进行转换。指向字符char的常指针经常用来表示字符串,像windows中的LPCSTR就是const char *。

  1. const int &g=a;            //a的内容不能改,所以g(a的引用)也是const  
  2. //int &h=a;            //错误  
  3. int &i=const_cast&>(a);    //使用const_cast<>()把常量转成非常量  
  4. int const &j=a;            //与const int &等价,写法习惯不同而已  
  5.  
  6. const int *k=&a;        //a的内容不能改,所以k(a的指针)也是const  
  7. int const *l=&a;        //与const int *等价,写法习惯不同而已  
  8. //int *m=&a;            //错误  
  9. const char *n="string";        //字符串“string”内部字符不能改变了  
  10. char *o="string2";        //字符串“string2”可以修改 

3. 修饰对象

如果修饰的是一个对象,则表示该对象的数据成员均为常量,并且只能调用该对象的常成员函数,这一点在后面解释。综合1、2、3条得出,const修饰符表示所修饰的内存区域被上了锁,不能修改。

对一个对象的常引用经常用来函数传参,当函数参数为对象是,直接按值传参会调用对象拷贝构造函数,复制对象,对程序效率造成影响,所以一般按引用传参,为了不改变传入的参数,要加const表示是常引用。

  1. const int &g=a;            //a的内容不能改,所以g(a的引用)也是const  
  2. //int &h=a;            //错误  
  3. int &i=const_cast&>(a);    //使用const_cast<>()把常量转成非常量  
  4. int const &j=a;            //与const int &等价,写法习惯不同而已  
  5.  
  6. const int *k=&a;        //a的内容不能改,所以k(a的指针)也是const  
  7. int const *l=&a;        //与const int *等价,写法习惯不同而已  
  8. //int *m=&a;            //错误  
  9. const char *n="string";        //字符串“string”内部字符不能改变了  
  10. char *o="string2";        //字符串“string2”可以修改 

4. 另外一种const修饰指针的方法

也就是著名的const char *和char * const的区别的问题。const char *前面说过,意思是常指针,char*所指的内存区域不能被修改,用来表示字符串。而char * const的意思指针所指向的位置不能修改,C++关键字也就是该指针不能指向其他内存区域了,这和引用很像,char * const相当于char &,所以常引用const char &相当于const char * const,也就是指针指向谁不可变,指针指向的内容也不可变。注意const是写在了*的前面还是后面,这是***区别,char const *的意思和const char *是一样的。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...