八股学习Day1

一、关键字

01.static

  1. 隐藏,当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性;
  2. 默认初始化为0,初始化时存储在静态数据区,默认值都是0x00;
  3. 改变变量的生命周期;
  4. 在类中时:
    (1) 静态成员变量:A.静态成员变量的服务对象不是单个类实例化的对象,而是所有类实例化的对象;B.定义时要分配空间,要在类外进行初始化;C.静态成员变量存储在全局数据区,随着进程的消亡而消亡
    (2) 静态成员函数:A.静态成员函数为整个类服务,而不是具体的一个类的实例服务;B.静态成员函数没有this指针,static类成员函数不能访问非static类成员

关于this指针:this指针是一个隐含的指针,它指向当前对象的地址。当一个成员函数被调用时,编译器会将该函数的调用对象的地址作为this指针传递给函数。静态成员函数中没有这样的this指针,所以静态成员函数不能操作类中的非静态成员函数.否则编译器会报错.

类中静态成员函数不能被声明为const,虚函数或volatile:

const:const 修饰的成员函数是指其在函数内部不会修改对象的状态。这意味着该成员函数只能访问对象的 const 成员,而不能访问非 const 成员。由于静态成员函数不依赖于任何对象,因此它们不能声明为 const

virtual:虚函数是指在基类中声明的函数,在派生类中可以被重写。static成员不属于任何对象或实例,所以加上virtual没有任何实际意义;静态成员函数没有this指针,虚函数的实现是为每一个对象分配一个vptr指针,而vptr是通过this指针调用的,所以不能为virtual;虚函数的调用关系,this->vptr->ctable->virtual function。

volatile:volatile 修饰的变量是指该变量可能在任何时候都会被修改,因此编译器不会将该变量缓存在寄存器中,而是每次都从内存中读取该变量的值。静态成员函数不依赖于任何对象,只能对静态成员变量做修改,不涉及任何其他对象变量的修改,因此不能声明为 volatile

02.在C语言中

你可能感兴趣的:(C++学习,学习,开发语言)