C++关键字static、const和volatile的几点说明

 1 static关键字

   首先他表示定义的变量是静态的,在静态存储区分配内存空间,c++里面主要有三种用法

   (1)在函数外用static关键字

      static int var = 0;

       int   var2 = 0;

      int main()

      {

              var++;

               var2++;

              printf("%d %d",var,var2);

              return 0;

       }

  此时,var的作用域是整个文件,这里顺便也说一下var2,它的作用域是整个项目,即这个项目中的其他文件也能访问var2,但是不能访问var,这是全局变量和静态变量的一个区别

 (2)在函数内部使用static关键字

    void test()

{

       static int var;

       printf("%d",var);
}

int main()

{

      test();

      return 0;

}

var 的作用域仅限于test()函数,但是他也被分配在静态存储区,在整个程序的运行过程中它都占有那块内存,只是只在test()里面有效。

2 volatile 关键字

    它表明某个变量即使程序代码没有对内存单元进行修改,它的值也可能改变,消除编译器的优化。

    比如,程序中连续用到某个变量的值,那么编译器就会把这个变量缓存,下次再用的时候就直接从缓存里读,而不去读内存,这样就可能导致读到的数据是已经被修改的,加上这个关键字,就会通知编译器不要进行这种优化。

 

3 const 关键字

   在c++中全局变量加上const后,其作用域就会由整个项目编程整个文件,这一点与c稍有区别。

   (1)const char * const  mouths[12]={'jan','Feb',...........};

   采用从右向左的方式来解释, 首先这是个 const数组,其次这个数组的每个元素是char * 的指针,最后,每个指针还是const型的,即第一个const说明每个指针防止字符串没修改,第二个const说明每个指针必须是最初指向的字符串。

   (2) const int *pt: 从右向左,一个指针指向const int 型的变量,即指针指向的是一个常量,但是这个指针也可以指向其他的常量,即pt可以被修改

  (3) int const *pt:  这是个const型的指针, 指向int型的变量,但是*pt可以被修改。

 

你可能感兴趣的:(编程,C++,c,优化,存储,编译器)