我听说不同语言的关键字含义存在差异static
,但我还没有找到一个很好的列表来巩固这些差异。
这是我所知道的含义static
in C++:
- 对于函数内的局部静态变量,变量在启动时初始化,并且值在函数调用期间保存。
- 静态数据成员在类的所有实例之间共享。换句话说,静态数据成员只有一个实例。静态数据成员必须在文件范围内初始化。
- 静态成员函数只能访问静态成员。
- 在递归代码中,保证静态对象或变量在代码块的不同实例中具有相同的状态。
- 在文件范围内定义的静态对象和变量仅具有内部链接。其他文件不能使用它们。
的含义是怎样的static
其他语言的变化?
C
- 关键字可以更改对象的链接或持续时间(生命周期)。
- 变量总是初始化为 0
- 功能具有内部联系。
- 如果在文件级作用域中声明:变量具有内部链接和静态持续时间(即存在于程序的整个生命周期中)
- 如果在块作用域中声明:变量没有链接,但有静态持续时间
- 一个翻译单元中可以有多个相同静态变量的声明。但请注意,它们必须相同。例如:在文件级范围:
int a; // a has external linkage
static int a; // a now has static linkage
// same as if you wrote: static int a = 0;
//...
static int b; // static linkage
extern int b; // extern loses its meaning, b still has internal linkage
//...
extern int b; // b has external linkage
static int b; // error
//...
void func() {
static int x; // automatic linkage, static duration
// same as if you wrote: static int x = 0;
}
C++
- 在文件级别范围内,变量和成员的用法已被弃用,取而代之的是匿名名称空间。仅作为兼容性而存在
- 变量仍然默认初始化(如 C 中)为 0
- “6.7 具有静态存储持续时间 (3.7.1) 或线程存储持续时间 (3.7.2) 的所有本地对象的零初始化 (8.5) 在任何其他初始化发生之前执行 [...]”
- 变量具有静态存储持续时间,除非附有
thread_local
说明符(从 C++0x 开始)
- 翻译单元中只能有一个 static 定义
- 成员变量/函数意味着它们是类的属性而不是实例
合法访问语法:instance.property 或 Class::property
- 静态成员函数只能访问静态成员变量
不
this
此类函数的指针
- 然而,非静态成员可以访问任何静态成员
- 在文件级别,对象具有内部链接,但具有类作用域的类成员除外
- 类成员需要在类声明中或通过类名和作用域解析运算符在外部显式定义
- 不能用
this
在静态方法中
动作脚本
- 与 C++ 中一样的类方法
- 不能用
this
or super
在静态方法中
- 只能通过类名访问,不能通过实例名访问
- 不遗传
- 然而,派生类可以访问基类的静态属性
- 同时使用 static 和 const 关键字声明的变量必须在声明常量的同时进行初始化
面向对象设计
- Singleton 设计模式被许多人认为是一种美化的静态对象
- 用于工厂设计模式
我可能错过了很多其他的事情——请随意补充。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)