posts - 4,  comments - 13,  trackbacks - 0

C++编程思想学习笔记-常量

一、全局范围的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-03-24 22:15 乘风破浪小树叶 阅读(885) 评论(2)  编辑 收藏 引用 所属分类: C++读书笔记

FeedBack:
# re: C++编程思想学习笔记-常量
2006-05-31 16:31 | CACA
const volatile表示这个对象不能被程序员改变,但可以通过外面的工具改变(?不懂)

这个的意思是,利用const volatile 声明的变量不能被你自己的应用程序所改变,但是能够被操作系统、并行的线程、硬件设备等改变。而const声明的变量的值则不能做任何改变。你可以编译一下下面这个例子。
#include <stdio.h>
#include <iostream>
#include <windows.h>
using namespace std;

DWORD WINAPI ThreadFun1( LPVOID lpParam)
{
int* lpParamTemp = (int* ) lpParam;
*lpParamTemp = 10;
return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
const int m = 5;
HANDLE hThread = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadFun1, (void* )&m, 0, NULL);
Sleep( 1000);
cout << m;
return 0;
}
这种情况下,最后的结果是5。现在试着把const int m = 5的定义改为const volatile int m = 5,结果是10。  回复  更多评论
  
# re: C++编程思想学习笔记-常量
2006-05-31 18:20 | 一己薄见
谢谢告知!  回复  更多评论
  

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


<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

乐者为王

长风破浪会有时
直挂云帆济沧海
Enjoy your life!
QQ:345825606

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜