快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

C++中的 static 关键字

前言:
 
  本文只是本人对C++中关于静态类型的一个总结,如错误之处,请大家帮我改正。我分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明static在类中的作用。
 
  一、在面向过程设计中的static关键字
 
  1、静态全局变量
 
  定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量。
 
  特点:
 
  A、该变量在全局数据区分配内存。
 
  B、初始化:如果不显式初始化,那么将被隐式初始化为0.
 
  C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。
 
  例(摘于C++程序设计教程——钱能主编P103):
   //file1.cpp   
#include<iostream.h>
void fn();
extern int n;
void main()
{
  n=20;
  cout << n << endl;
  fn();
}//file2.cpp
#include<iostream.h>
static int n; //定义静态全局变量,初始化为0;
void fn()
{
  n++;
  cout << n << endl;
}


  文件分别编译能通过,但连接时file1.cpp 中的变量n找不到定义,产生连接错误。
 
  D、文件作用域下声明的const的常量默认为static存储类型。

  2、静态局部变量
 
  定义:在局部变量前加上static关键字时,就定义了静态局部变量。
 
  特点:
 
  A、该变量在全局数据区分配内存。
 
  B、初始化:如果不显式初始化,那么将被隐式初始化为0.
 
  C、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或 语句块结束时,其作用域随之结束。
 
  3、静态函数(注意与类的静态成员函数区别)
 
  定义:在函数的返回类型前加上static关键字,函数即被定义成静态函数。
 
  特点:
 
  A、静态函数只能在本源文件中使用(这是与普通函数区别)
 
  例(摘于C++程序设计教程——钱能主编P103):

 //file1.cpp
        void fn();
        void staticFn()
        void main()
        {
          fn();
          staticFn();
        }
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论