先写public还是先写static_C++ static关键字到底有什么作用

在文章开头先写总结吧,省的文章太长大家看的又晕。简单总结下来static关键字具有以下两点作用:改变变量的生命周期和限定作用域

1、改变变量的生命周期

我们都知道在函数中申明的局部变量在函数调用完成后即会被释放,但是由static申明的局部变量的生存周期是长于函数的,也就是说即使函数调用结束后该变量的内存也不会被释放。下面我们直接看代码:

#include

#include

void func()

{

int i = 1 ;

static int i_static = 1;

i ++ ;

i_static ++ ;

std::cout<

}

int main()

{

std::cout<

func();

std::cout<

func();

system("pause");

}

我们运行起来看结果:

first run:

i:2

i_staic:2

sencond run:

i:2

i_staic:3

这样就很清楚了吧:i是普通局部变量的申明方式,在每次函数调用时都会重新分配内存重新初始化,在函数结束后该内存就会被自动释放。但是static声明的局部变量随着第一次函数的调用而初始化,却不随着函数的调用结束而销毁,而是一直存在直至程序结束。具体原理是什么这个就牵涉到C++程序内存的分配原则了。有兴趣的朋友可以关注小编,下一篇为大家详细讲解。

2、限定作用域

用static申明的变量和函数作用域都仅限本文件。关于限定作用域必须得结合C++的另外一个关键字‘extern’来讲解(修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。关于extern关键字的作用,关注小编后续为大家分享)。好,废话不多说直接上代码(程序猿就是这样,看代码比看文字舒服多了,嘿嘿)

这里有两个 .Cpp 文件其中a.cpp中代码如下:

#include

int test01 = 10 ;

static int test02 = 11 ;

void func1()

{

std::cout<

}

static void func2()

{

std::cout<

}

在这里定义了两个变量(一个静态一个非静态)和两个函数(一个静态一个非静态),然后再另外一个‘源.cpp’中引用他们,我们看运行结果是什么样的(注意看注释的代码)

using namespace std ;

extern int test01 ;

//extern int test02 ;

extern void func1();

extern void func2();

int main()

{

cout<

//cout<

func1();

//func2();

system("pause");

}

按照现在的代码运行结果是:

10

no static func"

但是当我将注释的代码放开然后编译运行就会报错:

8d2520d751182a108223eeb0871107be.png

这是因为在extern在寻找test02和func2的时候在a.cpp中被static给屏蔽掉(因为static的作用就是限定test02和func2的作用域只是作用于本文件即a.cpp文件)

好了,现在大家应该对于static的作用已经有了很全面的认识了吧!希望我的分享能够帮助大家,祝大家长发飘飘~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值