码迷,mamicode.com
首页 > 其他好文 > 详细

[关键字]const用法集锦

时间:2015-08-04 13:27:46      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:const

const 

作用:防止定义的变量or对象再次被修改

注意:const修饰的变量必须在定义时初始化,(当作为类的数据成员时例外)


用法如下:

1:修饰整个函数(常函数):防止修改非static成员变量

//常函数作用:防止修改非静态(static)成员变量
//即static成员变量可以改变,其他变量无法改变
class Example
{
private:
	int a;
	static int b;
public:
	void fun()const
	{
		a = 10;//错误!!!
		b = 10;
	}
};

2:修饰指针:防止*ptr或者ptr被修改

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都无法改变

3:修饰函数返回值:防止函数返回值被改变

//修饰返回值
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;//错误


6:修饰类的数据成员

定义类时无法初始化数据成员,因为编译器不为类分配存储空间,定义对象时才会分配存储空间,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;
}


7:节约内存空间,

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;  //编译时再分配内存

8:

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用法集锦

标签:const

原文地址:http://blog.csdn.net/zongyinhu/article/details/47274017

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!