标签:const
const
作用:防止定义的变量or对象再次被修改
注意:const修饰的变量必须在定义时初始化,(当作为类的数据成员时例外)
用法如下:
1:修饰整个函数(常函数):防止修改非static成员变量
//常函数作用:防止修改非静态(static)成员变量
//即static成员变量可以改变,其他变量无法改变
class Example
{
private:
int a;
static int b;
public:
void fun()const
{
a = 10;//错误!!!
b = 10;
}
};const出现在*的左边,*ptr无法改变
出现在*的右边,ptr 无法改变
//修饰指针 int a = 0; int b = 0; const int *ptr = &a;//修饰*ptr:不能通过*ptr改变a的值 *ptr = 10错误 int const *ptr = &a;//修饰*ptr:不能通过*ptr改变a的值 *ptr = 10错误 int *const ptr = &a;//修饰ptr :不能改变ptr的指向 ptr = &b错误 const int* const ptr = &a;//*ptr以及ptr都无法改变
//修饰返回值
const int Max(int &a, int &b)
{
return a > b ? a : b;
}
int &c = Max(a,b)错误
const int &c = Max(a,b)正确
4:修饰函数参数:当以引用或者指针传递函数参数时,如果函数参数不想被改变,可以加const保护
char *Strcpy(const char *src, char *dest)
{
assert(src != NULL);
assert(dest != NULL);
char *ret = dest;
while(*dest++ = *src++);
return ret;
}5:修饰变量:防止变量被修改
const int b = 0; b = 10;//错误
定义类时无法初始化数据成员,因为编译器不为类分配存储空间,定义对象时才会分配存储空间,const不是要在定义时初始化么,那么该怎么办呢??
const修饰的变量作为类的数据成员时,只能通过构造函数初始化,非静态数据成员无法在类外初始化
类的静态数据成员只能在类外初始化
class Example
{
private:
int a = 10;//类不占用存储空间,在类中无法初始化数据成员
const int b = 10;
static const int c = 10;
};
//以上定义都是错误的class Example
{
private:
int a;
const int b; //const修饰的变量作为类的数据成员时,只能通过构造函数初始化,非静态数据成员无法在类外初始化
static int c;//类的静态数据成员只能在类外初始化
public:
Example(int x, int y);
};
static int c = 0;
Example::Example(int x, int y) :a(x), b(y){}
int main()
{
Example a(0, 0);
system("pause");
return 0;
}
const定义的变量, 系统只为它分配一次内存, 而使用#define定义的常量宏, 定义几次分配几次, 这样const就很节约空间
#define PI 3.14 //使用#define宏 const double Pi = 3.14; //使用const,这时候Pi并没有放入内存中 double a = Pi; //这时候才为Pi分配内存,不过后面再有这样的定义也不会再分配内存 double b = Pi; //不会再分配内存, double c = PI; //编译时分配内 double d = PI; //编译时再分配内存
const定义的变量只能作用于定义它的该文件, 不能被该程序的其他C/C++文件调用,
如file1.cpp中 const int val;
在file2.cpp中, extern int val; //错误,无法调用,
要想const定义的变量能被其他文件调用, 定义时必须使用extern修饰
如file1.cpp中 extern const int val = 10;
在file2.cpp中 extern const int val; //正确,可以调用,
非const变量默认为extern, 要使const修饰的变量能被其他文件访问必须显示指定为extern
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:const
原文地址:http://blog.csdn.net/zongyinhu/article/details/47274017