c++ const小汇
来源:互联网 发布:windows创建窗口程序 编辑:程序博客网 时间:2024/05/01 01:55
在唐浩强的c++红书里讲了一些const的问题,结合c++primer和网上查到的一些资料,对const进行小汇总。
1,定义常变量
c语言里使用预编译进行字符置换(如:#define PI 3.14159),但是这种方法容易出错。c++里提供了const关键字。
例如:const float PI = 3.14159;
普通的常量我们都会弄得清楚,但配合上指针使用呢?
int b = 500;
const int* a = &b; // [a]
int const *a = &b; // [b]
int* const a = &b; // [c]
const int* const a = &b; // [d]
我们可以参考《Effective c++》Item21上的做法,如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。
那么,[a][b]是相同的,都是指向的内容为常量,这样情况不能对内容进行更改,即*a = 100;会有编译错误。不过,b = 100;仍然是可以的。
[c]是指指针本身是常量,不能被改变。即a = &c;或者a++都会编译出错。
[d]即是前两种情况的结合。它指向的内容和指针本身都不能进行改变。
2,修饰参数的const
如 void fun0(const A* a ); void fun1(const A& a);
调用函数的时候,用相应的变量初始化const常量,则在函数体中,按照const所修饰的部分进行常量化,如形参为const A* a,则不能对传递进来的指针的内容进行改变,保护了原指针所指向的内容;如形参为const A& a,则不能对传递进来的引用对象进行改变,保护了原对象的属性。
[注意]:参数const通常用于参数为指针或引用的情况;
3, 修饰返回值的const
如const int fun( ); const int* fun( );
这样声明了返回值后,const按照"修饰原则"进行修饰,起到相应的保护作用。
const int func(); //返回的是常量,所以必须这么调用:cosnt int a=fun();
4,定义常对象
在类里,如果定义数据成员为常量,如:const int hour;即为常数据成员。它不能再构造函数里被修改。定义的成员函数为常量,如void get_time() const;即为常成员函数。它只能引用本类中的数据成员而不能修改它们。
如下:
Object const t1或者const Object t1;
表示t1是常对象,其值在任何情况都不能改变。
void Object::func() const;
fun表示Object类的成员函数,可以引用,但不能修改本类的数据成员。
Object * const p;
表示p是指向Object类对象的常指针,p的值(p的指向)不能改变。
const Object *p;
表示p是指向Object类的常对象的指针,其指向的类对象的值不能通过指针来改变。
Object &t1 = t;
表示t1是Object类对象t的引用,t和t1指向同一内存空间。
- c++ const小汇
- const 小启发 (C专家编程)
- C语言小细节---------const变量
- 小谈const 熟练C/C++(二)
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之【const修饰符】
- C语言的那些小秘密之const修饰符
- C\C++小知识:const的常见用法
- const c
- const【C++】
- const ||c
- C++Const
- [c++]const
- C++:const
- const的小实验
- const 小知识
- 初步用户注册页面(更新)
- org-mode显示inline图片
- 统计一串字符串中出现次数最多和次多的单词
- 存储过程
- 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!
- c++ const小汇
- 优秀程序员的10种特质
- QuickSort(Java)
- 深入学习Hadoop-HDFS的基本概念
- 布局(线性布局 Linear Layout )相对布局 (Relative Layout)
- 两个线程交替打印ABABAB
- HLA中第二版的错误
- 【第7天】时刻不忘感谢别人的好意
- 深入学习Hadoop-HDFS的读写