分享知识

与大家一起分享知识

C++博客 首页 新随笔 联系 聚合 管理
  19 Posts :: 3 Stories :: 45 Comments :: 0 Trackbacks

一、全局范围的const使用
1、const的使用有两种效果,一是生成编译期常量,二是运行期常量。
      做为编译期常量主要用作值替代,即取代C中的#define常量定义,一般用于设置数组大小。
   此时不分配存储空间,只在有extern限定或取地址时才会分配空间。
      做为运行期常量主要控制程序的安全性,它们会被分配空间,但一经初始化就不能再改变,
   数组,结构等集合始终是运行期常量,不能当做编译期常量使用,例如不能用于设置数组大小。
   另外C中的const只是运行期常量。
2、const对指针的使用
   指向const的指针 const int* x,int const* x;
   const指针 int* const x;
   注意:关于赋值,不能把const指针(引用)赋给非const指针(引用)(会通过非const指针改
   变const指针指向的值!),但可以把非const指针(引用)赋给const指针(引用)。这是基于
   安全的考虑。
3、const用于函数参数与返回值
       参数做为const值一般作为函数中的一个初始值;但一般如下使用更易理解:
  void f(int ic)
  {
   const int& i=ic;
   //others
  }
    参数做为const指针或引用是基于安全与效率的原因;并且一般不改变参数的函数,参数要用
 const int* cip或const int& ci;这样的函数可const和非const参数,若函数参数没有const
 修饰则只能接受非const参数,不能接受const参数,不具有通用性,所以记住如下用法:
     void f(const int& ic)
     {}
 注意:所有临时变量都是常量;
        返回值做为const值时表明此返回值不能做为左值或修改,一般用于用户自定义类,对于内部
    数据无意义。
        返回值做为const指针时要注意接受返回值的变量要为const所修饰。
二、类内部的const使用
1、类内部const的含义-它在每个类对象里分配存储空间,且一旦初始化后就不能改变(运行期常
   量),它要在构造函数的初始化表中初始化。
2、要想在类内部使用编译期常量,可以使用enum枚举;它不会占用存储空间。
3、const用于成员函数-表明此类函数不会改变对象的数据,能被const对象所调用(const对象只
   能调用const成员函数)但若想在const成员函数中改变数据,有两种方法:
   1>通过this指针把const变量强制转换为非const的。
   2>用mutable修饰要改变的变量。
   推荐使用2>。
三、volatile的使用
   表示此数据可以被改变--用于编译器对此数据的优化假定,当编译器读取此数据时会认为它已
   被改变会再次读取到寄存器中,不会假定它没变从而直接使用寄存器的值。
   const volatile表示这个对象不能被程序员改变,但可以通过外面的工具改变(?不懂)。

posted on 2006-04-04 15:52 史传红 阅读(385) 评论(0)  编辑 收藏 引用 所属分类: C/C++细节知识

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理