cpp常见一些关键字(面试)

static 关键字

控制变量的存储方式和可见性

  • 作用1:修饰局部变量
    局部变量放在程序的栈区,生命周期在所包含的语句块执行结束时也结束了;
    如果使用static关键字来修饰的话。该变量的会存放在静态存储区,生命周期会一直延续到整个程序的执行结束。
    但是,虽然其存储区和生命周期改变了,但是其作用域没有发生改变。

  • 作用2:修饰全局变量
    全局变量本就放在静态存储区;
    全局变量可以在本文件中被访问到,也可以在工程中的其他文件访问(在那些文件中添加extern声明即可)
    使用static修饰全局变量,会改变其作用域,由原来整个工程可见变为本文件可见

  • 作用3:修饰函数
    作用类似于修饰全局变量;
    作用域发生改变;
    整个工程可见变为本文件可见

  • 作用4:修饰类
    类中的数据成员或成员函数,如果使用static进行修饰,那么表示这个成员属于类而不属于某一个实例对象,在内存空间中只存在一个副本,该类的所有对象共享,可以通过类::来调用
    而且,对于static 修饰的成员数据,先于对象存在,只能在类外定义和初始化(类::xxx)
    static修饰的成员函数不能够被 virtual修饰,因为static成员不属于对象或者实例,因此没有this指针;而虚函数是通过this来调用虚函数表,因此virtual修饰static成员函数没有意义

const 关键字

把变量声明为常量类型,常量类型一经初始化不允许修改

  • 作用1:修饰基本数据类型
    可以放在类型说明符前、后,声明该变量为常变量
    int const
    const int

  • 作用2:修饰指针变量和引用变量
    const int * ptr; 修饰指针所指向的变量 为常量类型,
    int * const ptr; 修饰指针为常量类型,指针的指向不允许修改

  • 作用3:修饰函数形参
    形参为指针或者引用类型
    对形参对象进行常量化,防止被改变,起到保护原对象的作用

  • 作用4:修饰函数返回值
    保护函数返回值在返回过程中不遭到破坏
    通常是指针或者引用类型

  • 作用5:用于类中修饰类 数据成员
    const修饰的类数据成员不同于static,是属于实例对象的;
    const修饰的类数据成员的初始化只能在类构造函数的初始化列表中完成;(否则会提示:表达式必须是可修改的左值)

  • 作用6:用于类中修饰类 函数成员
    const修饰成员函数,防止成员函数修改对象的内容❓❓
    (否则会提示:表达式必须是可修改的左值)
    (好像也不能调用非 const 的成员函数)
    只能调用const成员函数,不能对数据成员进行赋值等修改操作

  • 作用7:修饰对象
    const修饰的对象只能够调用const修饰的成员函数

extern 关键字

用于外部引用声明

  • 作用1:用在变量或者函数的声明前
    如 extern int a; extern void f();
    用来说明该变量/函数 是在别处定义的,在此处引用
    在main函数中用extern,那么只能main函数使用;
    原来可以用#include"xxx.h"来调用即可,但是使用extern可以加速程序编译的过程,节省时间

????

  • 作用2:用于指示c/c++函数的调用规范
    c和c++程序 编译后 目标代码中的 命名规则 不同,
    因此,比如在c++中调用c库函数,需要使用extern声明所引用的函数来告诉 链接器链接时 用c的规范来链接,以此来解决名字匹配的问题
volatile 关键字

告诉编译器这个变量是易变的
在编译的时候不要进行过激的优化,
告诉编译器再次使用到这个变量时,需要重新读取而不是直接使用上一次寄存器中的备份;
保证程序员写在代码中的指令一定被执行;

virtual 关键字
  • 作用1:定义虚函数
    在类中用virtual修饰类的成员函数,将函数定义为虚函数;
    这样子类继承时,可以重写这个函数,根据子类需求的不同来实现不同的功能;

  • 作用2:定义纯虚函数和虚基类
    virtual void function1() = 0;
    用于修饰类中的成员函数而给出实现;
    在子类中继承时完成函数的实现,
    这样,可以使用基类的指针或者引用来指向派生类对象,从而调用派生类的函数实现方式。

define 关键字

宏定义的关键字;
宏定义是在预编译阶段进行处理,没有类型,没有类型检查
编译器对宏定义只是做一个替换代入处理

  • 与const的区别:
    • const是在编译期间进行处理,const有类型,也有类型检测,系统会为其分配内存空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值