C/C++常见修饰符

auto, const, register,  static, volatile, extern. 

默认情况下,类型修饰符从右向左依次绑定

  • extern

    置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

  • const 

    const修饰的是在它前面的内建数据类型(char,float,int,double),如果它前面没有类型,那它修饰的是紧跟着它的那个类型。
    如 const char * argv[] 与 char const * argv[] 是等价的。

    常量是被编译器放在内存中的只读区域。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。全局的基本类型被const修饰后存储在.rodata中,全局的指针类型被const修饰后存储在.data区域。

    const成员函数:const在参数表后

    返回值是const:前面带const

    const对象只能调用const成员函数,不能调用非const成员函数。非const对象无此限制,即可以调用非const成员函数,也可以调用const成员函数

  • static 

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

    面向过程

    静态全局变量:全局数据区分配内存,仅文件内可见。区别于全局变量,全局变量默认具有外部链接性,作用域是整个工程,在另一个文件中使用extern全局变量名的声明就可使用全局变量。
    
    静态局部变量:作用域为局部作用域,在程序执行到该对象的声明处时被首次初始化,以后的函数调用不再进行初始化。为了能满足局部静态变量只被初始化一次的需求,很多编译器会通过一个全局的标志位记录该静态变量是否已经被初始化的信息,类似以下伪代码,注意它不是线程安全的(对于写操作,需要两个以上的存储周期):
    
    bool flag = false;
    if (!flag)
    {
        flag = true;
        staticVar = initStatic();
    }
    
    静态函数:在声明它的文件当中可见,不能被其它文件使用。
    

      面向对象

    静态数据成员:静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。在类外初始化
    
    静态成员函数:无this指针,仅能访问静态成员变量,静态成员变量即可被静态成员函数也可被普通成员函数访问。
    
  • volatile 

    volatile修饰符的作用:强制访存操作,防止编译器优化(不进行优化时,自动变量与寄存器变量存放在存储器中;优化后它们在寄存器中),告诉编译器每次必须去内存中取值,而不是从寄存器或者缓存。

    如果编写一个使用非局部跳转的可移植程序,则必须使用volatile属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值