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