C++中几个关键字

volatile

对一个变量的数据进行操作的时候:
将变量数据从内存加载到cpu寄存器。
若编译程序的时候,进行了代码优化,则会对使用度极高的数据,直接加载到寄存器,以后访问的时候直接从寄存器获取,提高程序性能。
这时候若我们修改了变量的值,在内存中数据已经改变,但cpu这时候并不重新到内存中获取这个数据。

修饰某个变量,表明某个变量的值可能随时被外部改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新读取,从变量的地址中(内存中)读取数据。

volatile的作用是告知编译器,它修饰的变量随时都可能被改变。因此,编译后的程序每次在使用该变量的值时,都会从变量的地址中读取数据,而不是从寄存器中获取。

  • 作用:在进行编译时不优化,在执行的时候不缓存, 每次都需要从内存中读出(保证内存的可见性)
  • 防止编译器过度优化,保持内存可见性。每次访问数据都需要从内存中重新获取
  • 场景:多用于多线程或多CPU编程
int a=1;
void sigcb(int signo)
{
a=0;
}

int main()
{
   signal(SIGINT,sigcb);
while(a)
 {
 }
printf("over\n");
}
static和const

static和const
static关键字至少有下列几个作用:
(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内
(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量

const关键字至少有下列几个作用:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左
值”。

extern

extern:声明外部的全局变量,extern只是用来声明不用来实现。

简单的理解就是,若一个变量需要在同一个工程中不同文件直接使用或修改,则需要将自变量做extern声明。只需将该变量在其中一个文件中定义,然后在另外一个文件中使用extern声明,且两个变量类型需一致。

在1.c中定义全局变量
int i; 
 
在2.c和3.c中都用 
extern int i;
 
声明一下就可以使用了

在定义函数时如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。在文件中要调用其他文件中的外部函数,则需要在文件中用extern声明该外部函数,然后就可以使用。

static 关键字和extern关键字比较:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值