const的用法
来源:互联网 发布:eia油库存最新数据 编辑:程序博客网 时间:2024/05/20 18:16
对于const的用法,我总结了几位前辈的文章,得出下文,由于水平有限,有错之处,还烦请各位朋友指正。
1、为什么使用const?
采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动(这一句我不能理解,还请理解的朋友帮忙指出);许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替)
2、用法
用法1:常量
(1)定义常量不分配空间,取代了C中的宏定义,声明时必须进行初始化。const限制了常量的使用方式,并没有描述常量应该如何分配。如果编译器知道了某const的所有使用,它甚至可以不为该const分配空间。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储。―《C++ Program Language》
(2)声明变量分配空间,用const声明的变量虽然增加了分配空间,但是可以保证类型安全。
C标准中,const定义的常量是全局的,C++中视声明位置而定。
用法2:指针和常量
使用指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const“预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const。所以出现在 * 之前的const是作为基础类型的一部分:
从右向左读的记忆方式:
1)const int a;
int const a; //两条语句的意义相同,声明一个常整形数a
char const *pc1;
const char *pc2; //到const char的指针(后两个声明是等同的)
2) char *const cp1; //a const cp1 of pointer to char,指向char的常指针
3) const int *cp2; //a cp2 of pointer to int of const,意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)
4) int const * a const; //意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)
用法3:const修饰函数传入参数
将函数传入参数声明为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
int FindNum(const int array[], int num, int conut);//声明函数
上面这例子中,编译器会把array[]当作常量数据的数组看待。所以,假如你不小心给数组赋值,那么,编译器就会报错了。因此,当你不需要也不想修改数组的数据时,最好用const把数组定义为常量数组。
用法4:修饰函数返回值
可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。
用法5:const修饰成员函数
const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;
const对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;
const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。
3、使用const的优点:
1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。
3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
- const 的用法
- const关键字的用法
- const的用法说明
- const限定词的用法
- const 的用法
- const的用法【转】
- const的用法小结
- const的用法
- 关于CONST的用法
- const的用法lizi
- const的用法lizi2
- const的用法
- 关于const的用法
- Const的用法
- CONST的用法
- const的用法
- 关于CONST的用法
- 关于CONST的用法
- 学java得这样学,学习东西确实也得这样
- 人之道
- 做了Nebula3的应用程序向导
- 错误:
- Flex中如何监测摄像头Camera对象活动以及状态事件与信息
- const的用法
- Flex中如何利用Camera.names和Camera.getCamera(),获取摄像头名称数组
- the movie
- fckeditor常用用法
- Flex中通过borderStyle和dropShadowEnabled样式,给VBox容器设置阴影
- Flex中如何通过verticalScrollPolicy属性,控制VBox容器内容超过容器大小时滚动条自动显示与否
- 辞职
- Flex中如何通过verticalGap样式,设置VBox的各项间间距
- Flex中如何通过direction属性,改变Box容器(HBox或VBox)方向