static作用(C/C++)

来源:互联网 发布:2017网络作家排行 编辑:程序博客网 时间:2024/06/14 06:14

变量

在《C程序设计语言》中是这么解释的:
通过static限定外部对象,可以达到隐藏外部对象的目的。

举个例子:
在a.c文件中

#include<stdio.h>int index=0;int func(void){    ...}

如果想让a.c中定义的index只能给a.c文件中的函数使用,其他文件的函数不能调用。那么要在index之前加上关键字static作为前缀。

#include<stdio.h>static int index=0;int func(void){    ...}

这样,在同一程序的不同的文件中也可以定义同名变量,同名函数,不需要担心有名字冲突。

static也可用于声明内部变量。static类型的内部变量同自动变量一样,是某个特定函数的局部变量,只能在该函数中使用,但它与自动变量不同的是,不管其所在函数是否被调用,它一直存在,而不像自动变量那样,随着所在函数和退出而存在和消失。static虽然只能在某个特定函数中使用但一直占据存储空间的变量。

函数

static函数只能在该函数声明所在的文件可见。

静态成员

与类本身有关,而不是和某个成员有关
《C++ Primer》中举了个例子:
一个银行账户类需要一个数据成员来表示当前的基准利率。我们希望基准利率与类相关,而不是和类的每个对象都有关联。而且也没必要每个对象都存储基本利率。但是一旦基准利率改变,我们希望所有对象都能使用新值。
我们可以通过在成员的声明之前加上关键字static使得其与类关联在一起。

class Account{public:    void calculate(){...}    static double rate(){return interestRate;}    static void rate(double);private:    static double interestRate;    static double initRate();}

静态成员和静态成员函数不与任何对象绑定在一起,它不包含this指针,因此不能声明成const,也不能是虚函数。

在牛客网看到不错的总结:
https://www.nowcoder.com/questionTerminal/3dcc1dc72db540a4911f17252b84fb7f
来源:牛客网

C中的作用
1、隐藏:当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.
2、static的第二个作用是保持变量内容的持久:存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,
说到底static还是用来隐藏的。虽然这种用法不常见
3、static的第三个作用是默认初始化为0(static变量)

C++中的作用
表示这个静态成员或静态函数在类中只有一份实例
1、不能将静态成员函数声明为const,也不能定义为虚函数。
2、静态数据成员是静态存储的,所以必须对它进行初始化。 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)
3、静态数据成员在<定义或说明>时前面加关键字static。

0 0
原创粉丝点击