对const和static的理解
来源:互联网 发布:写真制作软件 编辑:程序博客网 时间:2024/06/08 00:59
上学期学c的时候,const和static就弄得不是很清楚,好像考试有道静态变量的选择题还纠结了好久~昨晚把小红书认真看了一遍,算是有了点头绪。梳理下。
1. const
(1) 如果我们想定义一个变量,在初始化之后就不能更改它的值,那么只要将这个变量设置为const。const int i = 1 或 int const i = 1 两种写法都可以。初始化赋值之后,再对其进行修改就是非法的。
(2)在c++的class中我们对有const的情况进行讨论。首先,常对象。class Student ; const Student s.酱紫定义一个学生类的常对象s,这样Student类中的数据成员就自动变成const变量,且这个对象对外界的唯一接口是const函数。只能通过 例如 void diaplay() const;这样的const成员函数来调用,对非const成员函数的调用是非法的。
(3)数据成员为const变量情况下,其值不能被修改。无论是const函数还是非const,只可以引用而不可修改它的值。
(4)成员函数为const的时候,对数据成员只能引用而不能修改。
(5)const成员函数不能调用非const函数,防止调用之后修改,失去了const的意义。
(6)常数据成员在初始化的时候不能用构造函数,只能通过初始化表的方式进行初始化。
总之,在非常对象的情况下,只要成员函数和数据成员有任意一方的属性为const,那么数据成员的值就不可以在函数中被修改。成员函数作为对外的借口。
2.static
静态。我们将静态变量放在内存的静态存储区。静态变量的空间不随函数或者作用域的结束而被释放,而是等到程序的结束,才会被释放。在c++中,我们将某些数据成员定义为static,目的是实现数据的共享。举个例子,ABC三个大学都是大学这个类中的实例化的对象,由于某种原因,需要ABC三所大学共建一个图书馆,我们在大学这个类中就可以将图书馆定义为静态成员变量,所有的大学类的对象共享图书馆这数据,但是,需要明确的是,静态数据成员不属于任何一个对象,是属于类的。额,有点难理解哈。图书馆这个数据并不放在任何对象自己的内存区域,而是放在另一块静态存储区,独立于任何对象,属于这个类。所以我们在初始化的时候,静态数据成员并不能在构造函数或者初始化表中初始化,应该在类外单独初始化。例如 University::library = xxx;这样。不过我们在使用static libraty这个静态数据成员的时候可以通过对象名+ . 来进行引用,需要注意的是,这里并不是属于某个对象的静态数据,而是使用了对象的类。准确地说,还是 University::library 这样。
静态成员函数。例如static void display();原则上静态成员函数是专门为了处理静态数据而定义的。由于静态成员函数不属于任何对象,也没有this指针,也不能直接对非静态数据成员进行访问。但是可以直接访问静态数据成员。(应该是在同类中的原因,逻辑上是在一起的)。通过对象名和类名访问静态成员函数都是可行的。同理,只是用了对象的类名来进行访问。另外,如果想在静态成员函数中对非静态数据成员访问,因为没有this指针,需要在在数据前加上对象,让数据成员知道是使用哪个对象的数据。
我们应该保证在静态成员函数中只处理静态数据成员,体现程序清晰的结构。
静态成员函数和非静态根本区别就是有没有this指针。~~OK, Let's return 0!
- 对const和static的理解
- 对 static const char* const str[] = {“string”} 的理解
- 对static、const等六个关键字的理解
- # IOS 对 static extern const #define 的理解
- 对const和引用的新理解
- static、const和static const的区别
- const,static,extern 的理解
- 谈一谈对static和this的理解
- 对const的理解
- 对const的理解
- 关于“const ”关键字和“static”关键字用法的一些理解
- 对static的理解
- 理解PHP5中static和const关键字
- 理解PHP5中static和const关键字
- 理解PHP5中static和const关键字
- const和static const的区别
- const和const static的区别
- const 和static const 的区别
- 梯度下降法-线性拟合
- java获取随机数之一
- linux c select函数使用求解释
- P122.39
- Mysql 配置主从
- 对const和static的理解
- _BIN 二进制排序
- 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称
- 解析url中search
- POJ 3253 Fence Repair
- GCD网络多线程---同步执行,异步执行,串行队列,并行队列
- hdu 2955 Robberies
- shell脚本的学习
- C++开发BHO之HelloWorld