const常用小结
来源:互联网 发布:迅雷校园招聘java笔试 编辑:程序博客网 时间:2024/06/08 15:42
在我们自己编程或或阅读他人代码时经常遇到const这个关键字,由于它的用法叫复杂,因而常常我们会被它弄晕,下面就自己的学习对它作一小结。
一 ,在C语言下的常见用法:
1.const定义一个常量,如:
const int a = 10; // 正确 推荐一种
int const a = 10; // 正确
用法:在定义常量时需要同时对该常量进行初始化,因为定义了常量之后就不能再改变了。如上面的a,在使用const修饰符限定之后,a就属于一个int型的常量,不能够在修改。那么自然下面的定义就是错误的:
const int a;
a = 10; // error,不能这样定义一个常量
2,const定义一个常量指针,如:
int c = 5;
const int* b = &c;
用法:将const放在类型说明符的前面(注意,这时如果写int* const b就错了,意义完全不一样)。这时b指向的数据是常量,不可以改变,如这时又写*b = 20;则是错误的,但如果这时又有一变量,int d = 5; b = &d;则是可以的,因为对于b来说,本身的地址是可以改变的。
3.const定义一个指针常量。如:
int a;
int* const b = &a;
用法:将const放在“类型*(如 char*)”的后面;在定义指针常量时,必须同时对指针常量赋值。以后常量指针就不能指向其他变量了。但其指向的内容是可以改变的。如:
char const ch[6] = "Hello";
char* const p = ch;
p = "beautiful"; // 错误,p属于一个指针型的常量,不能修改
*p = "beautiful"; // 正确,仅修改了起指向的内容
3.const 定义指向常量的指针常量,如:
const int a = 80; // 定义常量
const int* const p= &a; // p为常量指针常量,p指向常量a
用法:在 类型*(如:int*)前后均加const.在定义常量指针常量时,也必须对其进行初始化,常量指针保证了指向的数据不可以改变,指针值也不可以改变,即君不可修改。
总结:其实指针常量和常量指针的用法仅就以上的两点来说是逆向的,弄懂了其中的一种,另外一种完全可以反过来去理解了。
二 在C++中面向对象时的const
在我们进行对数据共享时,为了保证他不被修改,那么我们常使用const,吧相关的数据定义为常量,就是避免我们无意之中的误操作改变有关数据的状况。那么现在我们总结一下const的常用的几点用法。
1.常对象。一般形式为:
类名 const 对象名[(实参表列)] 或
const 类名 对象名[(实参表列)]
如;
Time const t1(28, 63); // t1为常对象
注意几点:
①常对象的数据成员为常变量且必须要有初始化的值。因为为常变量,所以数据成员的值都不能够被修改。
②常对象不能调用该对象的非cons 型的成员函数。如果要调用,必需将该成员函数什么为const.如
void getnum() const; // 函数声明为const
这时该函数被称为常成员函数,就可以访问常对象了。但仍然不能够改变其内数据成员的值。
2.常对象成员(即声明类时将数据成员和成员函数声明为const)
①常数据成员
类似于常变量,如在类中声明常数据成员price如下:
const float price;
注意几点:
(1)只能通过构造函数的参数初始化列表多常数据成员进行初始化。
(2)声明为数据成员后其值在该对象中自始至终是不可变的。
②常成员函数
形式如:
void getprice() const: // 注意const的位置在函数名和括号之后
注意几点:
(1)常成员函数只能引用本类的数据成员(包括const和非const的)及const对象的数据成员,不能修改他们。一般的成员函数
(2)一般成员函数不允许引用const对象的数据成员,也可以引用本类的数据成员(包括const和非const的),可以修改非const数据成员的值。
(3)常成员函数不能在内调用另一个非const成员函数。
3.指向对象的常指针
将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初值,不能改变,即指向始终不变。
一般形式:
类名* const 指针变量名 = 对象地址;
举例:
Time t1(12, 52), t2; // 定义对象
Time* const ptrl = &tl; // const位置在指针变量名前面,规定ptrl的值是常值
// 并指向对象tl|.此后不能再改变指向
ptrl = &t2; // 错误,ptrl不能改变指向
几点注意:
(1)在定义指针变量时使之初始化。否则会出现错误。
(2)指向对象的常指针变量的值不能改变,即始终指向同一个对象,但可以改变其所指向的对象(如tl)数据成员的值,
(3)如果想将一个指针变量固定地与一个对象相联系,可以将其指定为const型指针变量。这样可以防止误操作,增加安全性。
(4)常指针常作为函数的形参,意在不允许函数执行的过程中改变指针变量的值。
4.指向常对象的指针变量
一般形式:
const 类名 *指针变量名;
(1)如果一个对象已被声明为常对象,那么只能用指向常对象的指针变量指向它,而不能用一般(非const对象)指针变量去指向它。如:
const Time t1(10, 12);
Time* p1 = &t1; // 非法
const Time* p = &t1; // 合法
(2)如果定义一个常对象指针指向一个非const对象,则指向的对象不能通过指针来改变。如:
Time t1(10, 12);
const Time *p = &t1;
t1.hour = 18 // 合法
(*p).hour = 18; // 非法
注意几点
(1)指向常对象的指针最常用于函数形参,目的在于保护形参所指向的对象在函数执行的过程中不被修改。
(2)当希望调用函数是对象的值不被修改,就应当把形参对于为指向常对象的指针变量
5.常引用 变量的引用就是变量的别名,变量名和引用名都同指一块内存空间。如果形参为变量的引用名,实参为变量名,则在调用函数时进行虚实结合,把实参的地址传给形参(引用名),如果不希望函数修改实参,则可以讲引用的变量声明为const(常引用) 如;
原来的:void fun(Time &t);
void fun(const Time &t); // 常引用
这样就在不能够改变他t的值,也就保证了其对应的实参的值不被修改。
在C++面向对象程序中,经常用常指针与常引用作函数参数,这样既能保证数据安全性,在调用时又不必建立实参的拷贝,而去我们在每次调用函数建立实参的拷贝时,都要调用复制构造函数,有时间上的开销,常指针和常引用作为函数参数,可以提高程序的运行效率。
- const常用小结
- const小结
- const 小结
- const 小结
- const小结
- const小结
- const小结
- const 小结
- [转载]Const用法小结
- Const用法小结
- Const用法小结
- Const用法小结[转载]
- Const用法小结
- Const用法小结
- const的用法小结
- Const用法小结
- const 用法小结
- c++:const 操作小结
- SQL ERROR 17002
- (swing读书笔记)JTable简介(中)
- linux基础之文件锁,读写锁相关
- 关于bcb6.0编译错误:[Linker Fatal Error] Fatal: Illegal option
- (swing读书笔记)JTable简介(下)
- const常用小结
- 共享内存区
- (swing读书笔记)JTree简介(上)
- C基础
- <<春·加薪>>
- ksoftirqd内核线程
- 四极管:转wince上ov3640摄像头的一些问题
- (swing读书笔记)JTree简介(中)
- 使用FusionCharts生成图表时出现invalid xml data错误提示的解决方法