C与C++中static关键字用法比较

一、预备知识

按作用域的称谓                                                    按定义位置的称谓

局部变量:在函数内定义的变量           <---->            内部变量

全局变量:函数之外定义的变量           <---->            外部变量

 

变量分类:

|------- 作用域:局部变量;全局变量

|------- 生存周期:动态变量;静态变量

二、相同点(三种作用)

C语言中,static关键字有如下三种作用。这三种作用在C++中也完全适用。

1. 声明静态局部变量

理解:将一个局部变量的生存周期设定为整个应用程序的生存周期。

           但是,这并不影响着它的作用域仍为局部区域。

案例:

C与C++中static关键字用法比较

在TestStaticLocalVariable()函数中,a为局部变量,又被声明成了static类型。

所以,第一次调用TestStaticLocalVariable()函数时,给a赋初始值1,然后输出2;

第二是调用TestStaticLocalVariable()函数时,会跳过a的定义语句,直接将a++,由于a保存了2,所有++后输出3。

2. 声明静态外部变量

理解:即声明为static类型的外部变量。

           为了使本文件内定义的外部变量,不能被其他文件使用。

         注:外部变量肯定是静态存储(生存周期)的,无论加static与否。

                   但是加上static后,它的作用域就变了。

案例:

(1)新建一个C++ Project,添加一个cpp文件,名为File,其中添加如下代码:

 C与C++中static关键字用法比较

(2)在main.cpp文件中,声明外部变量,并试图使用。

C与C++中static关键字用法比较

可见,编译器将stc报错,而var可以通过。因为,stc被我们声明成了static类型。

 

 

3. 声明内部函数

内部函数:不能被其他文件调用的函数

外部函数:能够被其他文件调用的函数

理解:类似于外部变量。

     为了使本文件定义的函数,不能被其他文件使用。

案例:

 (1)新建一个C++Project,添加一个cpp文件,名为File,其中添加如下代码:

C与C++中static关键字用法比较

(2)在main.cpp文件中,声明add 和sub两个外部函数,并试图使用。

C与C++中static关键字用法比较

可见,编译器将add报错,而sub可以通过。因为,add函数被我们声明成了static类型,mian.cpp中是不能使用的。

 

三、不同点(类的成员)

这是C++不同于C的static用法。

1.    类的静态成员变量和静态成员函数

这方面,不多提了。

只要记住一点:静态成员变量\函数,只能通过类名来引用,不能通过类的对象来引用。

参见我的另一篇博文:   http://blog.csdn.net/jarvischu/article/details/6420184

原文链接: https://www.cnblogs.com/JarvisChu/archive/2011/07/15/2752465.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C与C++中static关键字用法比较

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/28698

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午6:11
下一篇 2023年2月8日 上午6:11

相关推荐