Chinaunix首页 | 论坛 | 博客
  • 博客访问: 655701
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: C/C++

2010-12-26 10:52:00

1. const常量声明形式
   const 数据类型说明符   常量名 = 常量值;  或者
   数据类型说明符  const  常量名 = 常量值
 如 const int a = 100
 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。
 
2. 符号常量在声明时必须赋初值,而在程序中间不能改变其值。
 
3. const修饰类的数据成员
   多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。 const数据成员的初始化只能在类的构造函数的初始化表中进行
 
4. 指向常量的指针
   数据类型说明符 const *指针变量  = &a;或者
   const 数据类型说明符 *指针变量 = &a;
   如 const int a = 10; const int *p = &a;
  (1)不能通过*p来改变指向变量的值,因为指向的是常量,而常量的值是不允许改变,但是p可以改变指向,即指向该数据类型的其他变量,如p=&b,b是另外一个变量;
 (2)虽然p被定义为指向常量的指针变量,但是给p的赋值可以是非const变量,即前面的a和b可以是一般的变量;
 
5.指针常量
 数据类型说明符 * const 指针变量 = &a; 如int a = 100; int *const p = &a
(1)首先肯定p是指针变量,且p是常量,因此在声明p时必须初始化,且以后都不允许改变p的指向;
(2)p的初始化值是非const变量的地址,因此可以通过*p来改变a的值;
(3)不能用const常量的地址来初始化p的值,因为此时可以通过*p来改变指向变量的值,而常量的值在程序中是不允许改变的;
 
6. 指向常量的常指针
 const 数据类型 * const 指针变量 = &a; 如const int a = 100; const int *const p = &a;
此时p *p a的值都不允许改变;
 
7. const在函数声明中的应用
 在函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。
(1)修饰参数的const,如 void fun0(const A* a ); void fun1(const A& a); 调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const A* a,则不能对传递进来的指针的内容进行改变,保护了原指针所指向的内容;如形参为const A& a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。
[注意]:参数const通常用于参数为指针或引用的情况,且只能修饰输入参数;若输入参数采用值传递方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。
[
总结]对于非内部数据类型的输入参数,应该将值传递的方式改为“const引用传递,目的是为了提高效率。例如,将void Func(A a)改为void Func(const A &a)
对于内部数据类型的输入参数,不要将值传递的方式改为“const引用传递。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)
(2)修饰返回值的const,如const A fun2( ); const A* fun3( );
这样声明了返回值后,const按照"修饰原则"进行修饰,起到相应的保护作用。                   
[总结] 1 一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。2)如果给采用指针传递方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
(3)类成员函数中const的使用
一般放在函数体后,形如:void fun() const;
任何不会修改数据成员的函数都因该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将报错,这大大提高了程序的健壮性。
 
8、const对象
   同一般变量的声明和定义类似:
   const 类名 对象名;或 类名 const 对象名;
   const对象一旦定义初始化后,其值就不在允许改变,const对象只能访问类的const成员函数,不能访问其他的成员函数。
阅读(1004) | 评论(1) | 转发(0) |
0

上一篇:预处理命令

下一篇:const的用途

给主人留下些什么吧!~~

chinaunix网友2011-01-03 14:53:12

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com