命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字 C++初阶( 六 )


2、static 全局变量 表示一个变量在当前文件的全局内可访问
3、static 函数 表示一个函数只能在当前文件中被访问
4、static 类成员变量 表示这个成员为全类所共有
5、static 类成员函数 表示这个函数为全类所共有,而且只能访问静态成员变量
static关键字的作用
(1)函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值(2)在模块内的static全局变量和函数可以被模块内的函数访问,但不能被模块外其它函数访问(3)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝(4)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量
const关键字的作用
(1)阻止一个变量被改变(2)声明常量指针和指针常量(3)const修饰形参,表明它是一个输入参数,在函数内部不能改变其值(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数 , 不能修改类的成员变量(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为”左值”
引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 。也就好比我们给同学取了一个外号一样 。用法: 类型&引用变量名(对象名)= 引用实体;
int main(){ int a = 10; int& ra = a;// ra是a的引用 cout << a << endl; cout << ra << endl; system("pause"); return EXIT_SUCESS;}特性及注意事项

  • 引用在定义的时候必须初始化
  • 一个变量可有多个引用
  • 引用一个引用一个实体 , 无法再引用其他实体
Type& ref = val;
注意事项:
  • &在此不是取地址运算符,而是起到一个标识的作用
  • 类型标识符指的是目标变量的类型
  • 引用初始化之后不能改变
  • 不能有NULL引用,必须确保引用是和一块合法的存储单元关联
int a = 10;int b = 20;//int& ra;//引用必须初始化int& ra = a;int& rra = a;//int& ra = b;//引用一旦初始化,不能改变它的指向//int& raaa = NULL;//NULL本身就是不合法的,不能绑定不合法的空间数组的引用int arr[] = {1, 2, 3, 4, 5};//三种方式//1.定义数组类型typedef int(MY_ARR)[5];MY_ARR &arref = arr;//建立引用 , int &b = a//2.直接定义引用int(&arref2)[5] = arr;//3.建立引用数组类型typedef int(&MY_ARR3)[5];MY_ARR3 arref3 = arr;引用的使用场景//1.作为函数的参数void func(int &a, int &b){ cout << a+b << endl;}//2.引用作为函数的返回值int& func2(){ int b = 10;//不能返回局部变量的引用 int &p = b; return p;//错误的}int& func3(){ static int b = 10; return b;}void test01(){ int& q = func2(); cout << q << endl; q = 100; cout << q << endl; func2() = 200; cout << q << endl; cout << func2() << endl;//--------------上面的代码都是错误的,这里解释一下//int& q = func2();实际上就是int&q = p,但是fun2函数执行完了之后 , 局部变量全部被销毁了,所以int&q = 就指向了一个非法的区域,但是编译器没有检测出来 , 具体原因是什么不清楚 func3() = 100; cout << func3() << endl;}引用做返回值时 , 一般分两种情况:返回的对象未归还系统和返回的对象归还系统 。如果返回对象不归还系统,我们可以引用返回 , 否则就需要传值返回
想要返回局部变量:1.把局部变量写在堆区 2.把局部变量写在静态区
常引用注意:
  • 字面不能赋给引用,但是可以赋给const引用
  • const修饰的引用,不能修改
//普通引用int a = 10;int &ref = a;ref = 20;//int &ref2 = 10不能给字面量取别名,因为10这个字面量在内存中没有空间,存储在寄存器中//常引用const int &ref3 = 10;//可以给const修饰的引用赋予字面量//编译器会把上面的代码变为:int tmp = 10;const int &ref3 = tmp;

推荐阅读