C++中 Const 常量的用法,及变量的初始化


1. 值替代
  C语言中预处理器用值代替名字:
     #define BUFSIZE 100
  C++用const把值代替带进编译器领域:
     const bufsize = 100 ;或 const int bufsize = 100 ;
  同时还可以执行常量折叠:
     char buf[bufsize] ;
1.1 头文件里的const
   与使用#define一样,使用const必须把const定义放在头文件里。这样,通过包含头文件,可把const定义单独放在一个地方,并把她分配给一个编 译单元。const默认为内部连接,即仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。
 
  比如说在Test.h中定义了,
    const int   nTestConst = 1000;
   在A.cpp中include"Test.h",同时在B.cpp中include"Test.h"。就不会出现,当没有定义为const时,因变量定义出现两次而出错的情形.
 
   当定义一个const常量时,必须赋一个值给它,除非用extern作了清楚的说明:
     extern const bufsize ;
   虽然上面的extern强制进行了存储空间分配,但C++编译器并不为const分配存储空间,相反它把这个定义保存在它的符号表里。当const被使用时,它在编译时会进行常量折叠。

1.2 const的安全性
   如果想要一个值保持不变,就应该使它成为一个常量(const)。

1.3 集合
   const可以用于集合,但必须分配内存,意味着“不能改变的一块存储”。但其值在编译时不能被使用。
     const int i [] = {1,2,3,4};
     // float f [ i [3] ]; // illegal

2. 指针
  当使用带有指针的const时,有两种选择:1、或者const修饰指针正指向的对象,2、const修饰存储在指针本身的地址。

2.1 指向const的指针
   使用指针定义的技巧,正如任何复杂的定义一样,是在标识符的开始处读它并从里到外读。如果我们要使正指向的元素不发生改变,得写:
      const int * x;
   从标识符开始:“x 是一个指针,指向一个const int。”
把const从一边移到另一边,结果一样。
      int const * x;

2.2 cosnt指针
   是指针本身成为一个const指针,必须把const标明的部分放在*的右边,如:
     int d = 1;
     int * const x = &d;
指针本身是const指针,编译器要求给它一个初始化值,这个值在指针寿命期间不变。然而要改变它所指向的值是可以的,可以写*x = 2。这些可以总结成这样一句话: 以*为分界点, 当const在*的左边时,实际物体值不变;当const在*的右边时,指针不变。
 
3. 类的变量初始化
	class MyTestClass
	{  
	public:  
    	    MyTestClass() : m_ciInt(1), m_csStr("MyStr")  // const成员变量,在ctor参数列表中初始化  
   	    {}
        public:  
            const int m_ciInt;  
            const String m_csStr;  
            static int m_siInt;  
            static String m_ssStr;  
            const static int m_csiInt;  
            const static String m_cssStr;  
        };  
       int MyTestClass::m_siInt = 1; // static成员变量,在外部定义  
       String MyTestClass::m_ssStr = "MyStr"; // static成员变量,在外部定义  
       const int MyTestClass::m_csiInt = 1;  // const static/static const成员变量,在外部定义  
       const String MyTestClass::m_cssStr = "MyStr"; // const static/static const成员变量,在外部定义  

   1)static const 与const static是一样的,没有区别
   2)static const存储在静态存储区域,不可修改其值的常量,可用来替代define或enum
   3)所有类型的变量都可以声明为static const,只是除int类型外,其它的类型都必须要在.cpp中进行定义,只能在.h中进行声明。但是int类型则      可以在.h中进行定义。
   4)将变量声明为static const,是为了实际需要,为了设定一个在整个class范围内都不变的常量。


                                   转自: http://laokaddk.blog.51cto.com/368606/216630/
	                                  http://blog.csdn.net/lincyang/article/details/6215813
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值