八股学习Day1

本文详细介绍了static关键字在C/C++中的作用,包括限制变量和函数的作用域、控制生命周期以及在类中的应用。同时,解释了static变量只初始化一次的原因和初始化时机。extern则用来在不同文件间引用变量和函数。externC用于C++中调用C语言函数,避免名称修饰问题。文章还讨论了const、虚函数和volatile在类中的限制及其含义。
摘要由CSDN通过智能技术生成

一、关键字

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语言中,为什么static变量只初始化一次?

在C语言中,static变量在程序的生命周期内只会被初始化一次。这是因为静态变量是在程序编译时就被分配了内存空间,存放在静态区,并且其值在程序执行期间都会保持不变,所以只需要在第一次初始化时进行赋值即可。

03.static变量什么时候初始化?

C:初始化发生在代码执行之前,编译阶段分配好内存之后,就会进行初始化;

C++:引入对象后,要进行初始化必须执行相应构造和析构函数。所以C++标准定为全局或静态对象在首次用到时进行构造,并通过atexit()管理。在程序结束时,按照构造顺序反方向进行析构。

04.static对于工程模块化的作用

static可以控制变量、函数和对象的作用域。

static可以使得变量、函数和对象仅在当前模块中可见,可以在工程模块化中起到控制作用域、减少耦合性、避免命名冲突等作用,从而提高代码的可维护性和可重用性。

05.extern

可以在一个文件中引用另一个文件中定义的变量或者函数

extern关键字只需要指明类型和变量名就行了,不能再重新赋值

06.extern “C”的作用

在 C++ 中,extern "C" 用于指定某个函数、变量、代码块等按照 C 语言的规则进行编译和链接,以便与 C 语言代码进行互操作。

当使用 C++ 编译器编译 C++ 代码时,编译器会将函数名进行名称修饰(name mangling)以支持函数重载等特性。而 C 语言并不支持函数重载,函数名也不进行名称修饰。因此,当我们在 C++ 代码中调用 C 语言中的函数时,需要使用 extern "C" 来告诉编译器不要对这个函数名进行名称修饰,以便与 C 语言代码进行互操作。

07.const

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值