C和C++编程中static关键字的含义-修饰函数和变量

static用来修饰一个函数的时候,表示的意思如下:

1、表示该方法只在本c文件中有效。在其他c文件中无法访问这个方法。
2、static的方法的定义一般不放在.h文件中,因为这个方法只在一个c文件中有效。一般直接将该方法定义在c文件的开头部分就可以了。
3、一般申明这种方法用来封装一些逻辑,和面向对象的private有点类似。比如,我们申明一个方法为static,然后申明一堆其他的方法 (根据用途的不同),这些方法会用不同的参数调用该static方法,而这些方法不是static的,所以,这些方法是可以被其他文件调用的,而这个 static方法封装了所有的逻辑,而且只在本c文件中有效,有效避免了其他文件直接方法该方法。有点面向对象的意思哦。

static关键字用来修饰一个变量的时候:

1、如果该变量是全局变量,即不属于任何function的一个变量,那么,表示该变量只能在当前的源文件中使用,其他源文件不能使用extern关键字来引用这个关键字。所以,其他源文件也可以定义同名的变量,不影响。
2、如果在一个function中定义一个static变量,表示该变量的生命周期和本c文件的声明周期一样长,再次进入该function的时候,该static变量的值还保持为上次修改后的结果,如:

Code: Select all
int count() {
    static int result = 0;
    result++;
    return result;
}

每次进入这个count方法的时候,result的值不会被重复初始化为0,因为这是static变量,只会被初始化一次。下次进入这个count方法,result的值将会被一次次的累加。

顺便提一下C++中的static:

1. 如果static修饰一个class member variable,表示该变量和class type相关,多个该class的object/instance都share这一个变量。

2. 如果static修饰一个class function member,表示该函数没有this指针。其实也就是该函数和class type相关,不和instance相关。由于function没有this指针,就没法使用class instance中的变量,只能访问一些static的变量。

如果static变量或函数不出现在class中,则C++ Primer中明确提到,对于这种和传统C相同的static的变量或函数,应使用Unnamed Namespace来代替使用static。C++中使用Unnamed Namespace来代替传统的static,每个源文件都有自己独立的Unnamed Namespace,定义在unnamed namespace中的变量或函数表示只在该源文件中有效。其他源文件不能引用和访问这些变量或函数。其他源文件也可以定义名字相同的变量或函数。

传统的C中继承过来的static全局变量或函数将来有可能不支持,所以,请使用unnamed space来代替。

有关Unnamed Namespace的具体内容请参考C++ Primer 4th Edition Section 17.3

 

原文链接: https://www.cnblogs.com/super119/archive/2011/03/26/1996101.html

欢迎关注

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

    C和C++编程中static关键字的含义-修饰函数和变量

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

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

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

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

(0)
上一篇 2023年2月8日 上午12:51
下一篇 2023年2月8日 上午12:51

相关推荐