const ,static 和 volatile

来源:互联网 发布:js 获取元素父节点 编辑:程序博客网 时间:2024/05/22 13:57

        在C语言中,关键字static有三个明显的作用:
        1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变,且在下次调用这个函数时,其静态变量维持上次调用时的值。
        2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
        3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
        const关键字总结:

         1用于声明常量:

          int const a;
         const int b;
        2用于函形式参数声明中,由于const常量的只读性质,这基本等同于标明在此函数中不会修改这个参数。

       int add(const int p1, const char p2)
          {
             return p1+p2;
          }

        3与指针类型的组合
         const对一个指针类型有2种可同时使用的修饰方式,一是指针指向的对象是const的(对象状态不能改变),另一种是指针本身是const的(指针指向的目标不变,指针保存 的地址不变)2种修饰可以同时使用
       const char* p1 //对象状态不变
      char *const p2 //指针目标不变
      const char* const p3 //二者都不变
      char const*const p4 //同上

      4用于成员函数声明和定义中 (稍微有点复杂 )
        需要注意的一点是有const后缀和无const后缀的同名同参数列表成员函数是2个不同的重载。当对象具有const特性时调用它的成员方法就是对const成员方法的呼叫,对象不是const的时候就是对无const成员函数的呼叫。这是外部调用时const对成员函数的影响。
在实现const成员函数时,不能访问对象的非const成员(包括成员变量和函数),这实际上是在保证一个const后缀的成员函数不会改变对象的状态。如果某个非const的成员变量需要在const成员函数中访问,就在此变量前使用mutable关键字。还有一个细节,const成员函数中隐含的this指针是const T*类型的,通过const类型的指针是不能修改对象状态的,这从另外一个更接近编译器的角度理解了const后缀的成员函数。

        volatile关键字:

        一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。


 

       

      

原创粉丝点击