- static成员在内存中只存在一个副本,且其不是类和对象私有的,类的成员函数也只有一个副本。
- 若成员数据是static类型,要在类外进行初始化,否则默认为0;
- auto变量的一般值是随机的,因为系统在分配内存时,只是将地址分配给变量,并没有内存中存在的数据进行初始化,所以是随机值。
非静态成员
非静态成员是通过对象来访问
静态成员
静态成员是通过类限定来访问
Student::print();
&
- 引用直接操纵对象,具有间接寻址功能。
- 引用必须初始化。
- 引用一旦初始化便不能指向其他对象,即不能改变对象换成其他对象。
- 引用变量时直接加上&,但是在直接引用常量时,要在前面加上const。
- 传地址调用是指针间接对实参操作。
- 引用传递比地址传递调用更加安全,但是引用调用底层是用指针实现的。
- 函数值类型为引用可对指定的单元进行修改。
https://www.cnblogs.com/this-543273659/archive/2011/09/18/2180575.html
左右值
- 右值:数据值,存储在某个内存地址中,右值是被读取的值,文字常量和变量都可以被用于右值。
- 左值:地址值,即存储数据值的那块内存地址,文字常量不能被用作左值。
const
const与宏常量
const常量有数据类型检查,而宏常量没有数据类型检查。
const char *name="zhanghua";
char s[]="xiaowang";
name=s; //正确
*name="li"; //错误
地址可变,内容不可以直接变
char* const name="name";
name=s; //错误
不可以修改地址
常对象
- const Time t={};常对象必须被初始化,且不可被更新。
- 常对象不能调用普通成员函数,因为无法判断是否会修改数据成员的值。若是想调用这个普通函数,可以将函数声明为const,如果想要修改数据成员的值,可以将该数据成员声明为mutable。
常成员
- 常数据成员必须通过初始化列表进行初始化。
- const在声明和定义函数时,都要有const关键字,调用时不必加上const。
- 常成员函数不能更新对象的数据成员,也不能调用该类中没有const修饰的成员函数。
数据成员 | 非const成员函数 | const成员函数 |
---|---|---|
非const数据成员 | 可以引用,也可以改变值 | 可以引用,但是不可以改变值 |
const数据成员 | 可以引用,但是不可以改变值 | 可以引用,不可以改变值 |
const对象的数据成员 | 不允许 | 可以引用,不可以改变值 |