在C中const的用法:
1、在定义变量时使用(const常量在定义后不能被修改,故在定义时一定要进行初始化操作)
A:变量是个常变量: int const a=10;
const int a=10;
B:指针为指向常数的指针,(指针本身的值可以改变)
const int *cur=&b;
C :指针本身值不可变,但指向的内容可以变
int * const cur=&b;
D :指针为指向常数的常指针,即指针本身及指针指向的内容都不可变
const int * const cur =&b;
E: 说明引用为常数引用,即不能改变引用的值
const int& cur = 10;
2、在定义函数时使用
A 作为参数使用,说明函数体内是不能修改该参数的:
B 返回值使用,说明函数的返回值是不能被修改的:
C
在C++中const用法:
A : const类成员变量
在对象构造期间允许被初始化并在以后不允许被改变。const类成员和一般的const变量不同,const类成员是对于每个对象而言,它在对象构造期间被初始化,在这个对象生命期间不允许被改变。
class A
{
…
const int nValue; //成员常量不能被修改
…
A(int x): nValue(x) { } ; //只能在初始化列表中赋值
}
B: const成员函数
const 成员函数不允许在此函数体内对此函数对应的类的所有成员变量进行修改,这样可以提高程序的健壮性。一般写在函数的最后来修饰
class A
{
…
void function()const; //常成员函数, 它不改变对象的成员变量.
//也不能调用类中任何非const成员函数。
}
C: const修饰类对象/对象指针/对象引用
const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
class AAA
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); //×
aObj.func2(); //正确
const AAA* aObj = new AAA();
aObj-> func1(); //×
aObj-> func2(); //正确
const在C和C++中最大的不同是,在C中,const默认具有外部链接,而C++中则是内部链接。
所以当你只在定义const常量的文件中使用该常量时,c++不给你的const常量分配空间,此时const int c = 0;
相当于#define c 0;而在C中,它会给每个const 常量分配内存空间。