C++中static是什么?用法介绍_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++中static是什么?用法介绍

C++中static是什么?用法介绍

 2014/7/1 15:16:17  xadnitpx  程序员俱乐部  我要评论(0)
  • 摘要:像在VB,C,C++,Java中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语言中也是有出现的,只是有着不同的作用。西安达内培训(http://www.xatarena.net)讲师表示,C#与C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类
  • 标签:用法 c++ 什么
像在VB,C,C++,Java中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、PROLOG、Ada等语言中也是有出现的,只是有着不同的作用。

西安达内培训(http://www.xatarena.net)讲师表示,C#与C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。

1.生命周期问题:static变量在固定的内存区域进行存储分配,变量生命期一直到程序运行结束。而普通变量:局部变量和全局变量的存储分配在不同的地方进行,局部变量是在堆栈里面存储分配,变量生命周期随着函数的退出而结束;全局变量是在静态存储区存储分配(跟static变量一样)。

2.可见性问题:一个类里面的static变量在类外是不可见的;函数内部的static变量在函数外是不可见的;函数外的static变量只在当前编译单元可见。

3.初始化问题:全局static变量在main函数运行前初始化;局部static变量在第一次所在函数被调用时初始化。对于内部类型,字符类型初始化为ascii值为0的字符,其他类型初始化为0;用户定义类型,要由构造函数初始化。

注:如果一个包含局部static对象的函数未被调用,那么这个对象的构造函数也不会被调用。

4.静态对象的析构函数调用:在程序从main()中退出时,或者标准的C库函数exit()函数被调用时才被调用。调用abort()退出程序时,静态对象的析构函数并不会被调用。静态对象的销毁也是按与初始化时相反的顺序进行的。

#include<fstream>
#include
<stdlib.h>
#include<iostream>
using namespace std;
ofstream
out("static.out");
class obj
{
        char c;
        public:
        obj(char cc):c(cc)
        {
        out<<"obj::obj()
for"<<c<<endl;
        }
        ~obj()
        {
        out<<"obj::~obj()
for"<<c<<endl;
        }
};
obj
a ('a');
void f()
{
        static obj
b('b');
}
void g()
{
        static obj
c('c');
}
int main()
{
        out<<"inside
main()"<<endl;
        f();
        static char c;
        static float f;
        static int i;
        cout<<"char
c:"<<c<<endl;
        cout<<"float
f:"<<f<<endl;
        cout<<"int
i:"<<i<<endl;
        out<<"leaving
main()"<<endl;


        return 0;

}
发表评论
用户名: 匿名