C++语言的static 关键字的四种用法
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/27 06:11:09 C/C++
C++语言的static 关键字的四种用法C/C++
【CSDN博客 - C/C++】
1. 用于函数内部修饰变量,即函数内的静态变量。这种变量的生存期长于该函数,使得函数具有一定的“状态”。使用静态变量的函数一般是不可重入的,也不是线程安全的。
2. 用在文件级别(函数体之外),修饰变量或函数,表示该变量或函数只在本文件可见,其他文件看不到也访问不到该变量或函数。专业的说法叫“具有 internal linkage”(简言之:不暴露给别的 translation unit)。C 语言的这两种用法很明确,一般也不容易混淆!
3. 用于修饰 class 的数据成员,即所谓“静态成员”。这种数据成员的生存期大于 class 的对象(实体 instance)。静态数据成员是每个 class 有一份,普通数据成员是每个 instance 有一份,因此也分别叫做 class variable 和 instance variable。
4. 用于修饰 class 的成员函数,即所谓“静态成员函数”。这种成员函数只能访问 class variable 和其他静态程序函数,不能访问 instance variable 或 instance method。
当然,这几种用法可以相互组合,比如 C++ 的成员函数(无论 static 还是 instance)都可以有其局部的静态变量(上面的用法 1)。对于 class template 和 function template,其中的 static 对象的真正个数跟 template instantiation (模板具现化)有关,相信学过 C++ 模板的人不会陌生。
可见在 C++ 里 static 被 overload 了多次。匿名 namespace 的引入是为了减轻 static 的负担,它替换了 static 的第 2 种用途。也就是说,在 C++ 里不必使用文件级的 static 关键字,我们可以用匿名 namespace 达到相同的效果。(其实严格地说,linkage 或许稍有不同,这里不展开讨论了。)
本文来自CSDN博客,转载请标明出处:C/C++
1. 用于函数内部修饰变量,即函数内的静态变量。这种变量的生存期长于该函数,使得函数具有一定的“状态”。使用静态变量的函数一般是不可重入的,也不是线程安全的。
2. 用在文件级别(函数体之外),修饰变量或函数,表示该变量或函数只在本文件可见,其他文件看不到也访问不到该变量或函数。专业的说法叫“具有 internal linkage”(简言之:不暴露给别的 translation unit)。C 语言的这两种用法很明确,一般也不容易混淆!
3. 用于修饰 class 的数据成员,即所谓“静态成员”。这种数据成员的生存期大于 class 的对象(实体 instance)。静态数据成员是每个 class 有一份,普通数据成员是每个 instance 有一份,因此也分别叫做 class variable 和 instance variable。
4. 用于修饰 class 的成员函数,即所谓“静态成员函数”。这种成员函数只能访问 class variable 和其他静态程序函数,不能访问 instance variable 或 instance method。
当然,这几种用法可以相互组合,比如 C++ 的成员函数(无论 static 还是 instance)都可以有其局部的静态变量(上面的用法 1)。对于 class template 和 function template,其中的 static 对象的真正个数跟 template instantiation (模板具现化)有关,相信学过 C++ 模板的人不会陌生。
可见在 C++ 里 static 被 overload 了多次。匿名 namespace 的引入是为了减轻 static 的负担,它替换了 static 的第 2 种用途。也就是说,在 C++ 里不必使用文件级的 static 关键字,我们可以用匿名 namespace 达到相同的效果。(其实严格地说,linkage 或许稍有不同,这里不展开讨论了。)
本文来自CSDN博客,转载请标明出处:C/C++