900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C和C++编程中static关键字的含义-修饰函数和变量

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

时间:2023-04-23 20:20:18

相关推荐

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 allint 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。