const在C/C++中有很多的用法,现将const的用法做如下总结。
1、const修饰变量
const修饰变量,可以使变量具有常属性,也就是该变量在以后的使用中其值都不能进行改变。
const a=10;
a = 20;//错误,不能修改
在这里要注意的一点就是const修饰的变量要进行初始化。
2、const和指针
用const修饰指针有以下几种情况
int const* p;//指针p本身可以修改,但是p指向的内容不可以修改
const int* p;//指针p本身可以修改,但是p指向的内容不可以修改
int *const p;//指针p本身不能修改,但是p指向的内容可以被修改
int const *const p;//指针p本身和p指向的内容都不可以修改
const int *const p;//指针p本身和p指向的内容都不可以修改
3、保护函数参数不被改变
用const修身函数的参数,可以保证该参数的值在函数内部不被改变。
但是一般const修饰的参数都有哪些呢?
一般用引用或者传地址的方式给函数传递一个参数,如果在函数体内对该参数进行修改,那么就会连实参的值一并进行修改。
4、const修饰函数返回值
const修饰函数的返回值,防止函数的返回值被修改
const int fun()
{}
但是这里要注意的是,必须也用const修饰的变量来接收这个函数的返回值。
5、const修饰类成员函数
const可以修饰类成员函数,防止类成员函数中除了static成员之外的其他成员被修改。
class T
{
public:
void fun()const
{
a = 20;//错误,不可以修改非static的值
b = 10;
}
private:
int a;
static int b;
};
6、const修饰类的成员变量
类的成员变量可以分为静态的和非静态的,如果const修饰的是静态的成员变量,可以在构造函数中对该变量进行初始化;如果const修饰的是静态的成员变量,则需要在类外对该变量进行初始化。
class T
{
public:
T():
a(10)
{}
private:
const int a;
static const int b;
};
const int T::b = 20;
7、const和#define的区别
#define A 10
const int A=10;
上面两条语句的作用是一样的,但是后面一条语句可以节省内存空间,这是为什么呢?
原因在于在程序中多次使用const类型的变量,只会在第一次分配内存,但是如果使用#define定义的宏,则每次都会分配内存,这样看来使用const会节省很多空间。
8、const和extern
file1.cpp中, const int a;
file2.cpp中, extern int a; //错误,无法调用,
说明const修饰大的变量只能在该程序的本文件中使用,不能在该程序的其他文件中使用。
要想const定义的对象变量能被其他文件调用,定义时必须使用extern修饰为
extern const int val;