我知道c中的关键字有两种用法:
修改变量
修改全局变量
此用法限制了全局变量范围的范围,从定义的点到文件末尾.
修改局部变量
这种用法限制了定义函数中局部变量的范围,但也保留在内存的静态区域
修改功能
这意味着只能调用它定义的文件中的函数.
而在c ++中,除了c中的用法外,static还用于修改类的数据成员和函数成员.此用法限制属于该类的成员而不是该类的对象.
我想知道static在c/c ++ 中有没有其他用法?
static可能是C和C++中最容易混淆的重载关键字.它意味着不同的地方有不同的东西.
在函数中,static是一个存储类,表示在程序的生命周期中存在的变量.所以说
void f() {
static int i = 0;
}
Run Code Online (Sandbox Code Playgroud)
说i会在调用之间保留值f().其它存储类是默认auto(但要小心在意在C++ 11的变化),extern和register,加thread_local在C11/C++ 11.
在文件范围(或C++中的命名空间范围)中,static是一个链接说明符.static以这种方式标记的函数和变量具有内部链接,因此是当前翻译单元的本地链接.这意味着一个像这样的功能
static int f() {
return 3;
}
Run Code Online (Sandbox Code Playgroud)
只能由同一.c文件中的其他函数引用.static在C++ 03中不推荐使用这种用法,而是使用未命名的命名空间.我在某处看过它在C++ 11中再次未被提及.
在C++中,当应用于类的成员函数或成员变量时,它意味着函数或变量不需要类实例才能被访问.除了C++类访问说明符适用于成员之外,"类静态"成员函数/变量和全局函数/变量在实现方面几乎没有什么不同.
最后一个:在C99(但不是C++)中,static可以在数组函数参数中使用,如下所示:
void f(int a[static 4]) {
}
Run Code Online (Sandbox Code Playgroud)
这指定参数a必须是一个大小至少为4的整数数组.
我认为这就是全部,但是如果有任何我忘记的话,请在评论中告诉我!