啊const的作用
来源:百度文库 编辑:神马文学网 时间:2024/06/06 10:32:04
来源:http://hi.baidu.com/pavelliu/blog/item/ef799f5282b94b0e0df3e34e.html
const给人的第一印象就是定义常量。
(1)const用于定义常量。
例如:const int N = 100;const int M = 200;
这样程序中只要用到 N、M 就分别代表为整型100、200,N、M 为一常量,在程序中不可改变。
但有人说他编程时从来不用const定义常量。我相信
还有人说他不用const定义常量,他用#define宏定义常量
1。const定义常量是有数据类型的,而#define宏定义常
这样const定义的常量编译器可以对其进行数据静态类型安全检查
#define N 100
#define M 200 + N
当程序中使用 M*N 时,原本想要 100 * (200+ N )的却变成了 100 * 200 + N。
2。有些调试程序可对const进行调试,但不对
3。当定义局部变量时,const作用域仅限于定义局部变量的函数
光用const定义常量,并不能起到其强大的作用
(2)const修饰函数形式参数
形式参数有输入形式参数和输出形式参数。参数用于输出时不能加co
const只能用于修饰输入参数。
谈const只能用于修饰输入参数之前先谈谈C+
C++函数的三种传递方式为:值传递、指针传递和引用传递
值传递:
void fun(int x){
x += 5; //修改的只是y在栈中copy x
}
void main(void){
int y = 0;
fun(y);
cout<<"y = "< }
指针传递:
void fun(int *x){
*x += 5;//修改的是指针x指向的内存单元值
}
void main(void){
int y = 0;
fun(&y);
cout<<<<"y = "<}
引用传递:
void fun(int &x){
x += 5;//修改的是x引用的对象值 &x = y;
}
void main(void){
int y = 0;
fun(y);
cout<<<<"y = "<}
看了传递方式后我们继续来谈"const只能用于修饰输入参数
当输入参数用"值传递"方式时,我们不需要加const修饰
但要注意的是,当输入参数为ADT/UDT(用户自定义类型和抽象
例如:
void fun(A a);//效率底。函数体内产生A类型的临时对象用于复制参数 a,但是临时对象的
//构造、复制、析构过程都将消耗时间。
void fun(A const &a);//提高效率。用"引用传递"不需要产生临时对象
//构造、复制、析构过程消耗的时间。但光用引用有可能改变a
当输入参数用"指针传递"方式时,加const修饰可防止意外修改
例如:
void funstrcopy(char *strdest,const char *strsrc)//任何改变strsrc指向的内存单元,
//编译器都将报错
些时保护了指针的内存单元,也可以保护指针本身,防止其地址改变。
例如:
void funstrcopy(char *strdest,const char *const strsrc)
(3)const修饰函数的返回值
如给"指针传递"的函数返回值加const,则返回值不能被直接修
例如:
const char *GetChar(void){};
赋值 char *ch = GetChar();//错误const char *ch = GetChar();//正确
(4)const修饰类的成员函数(函数定义体)
任何不会修改数据成员的函数都应用const修饰
const修饰类的成员函数形式为:int GetCount(void)const;
只在总结,也许不够专业,不够全面,请大家指教联系我。