我听说语言之间关于关键字 static
的含义存在差异,但我找不到合并这些差异的好列表。
以下是我对C ++中 static
含义的了解:
static
的含义在其他语言中有何变化?
答案 0 :(得分:10)
<强> C 强>
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 ++ 强>
thread_local
说明符(从C ++ 0x开始)this
指针this
<强>的ActionScript 强>
this
或super
面向对象设计
我可能已经错过了很多其他的东西 - 随意填写。
答案 1 :(得分:5)
在Delphi中,static关键字专门用于定义类方法。在Delphi中,可以将普通类方法声明为虚拟并在子类中重写。另外Delphi有一个 self 变量,类似于其他语言中的 this 指针。但是在类方法中, self 指向调用方法的类而不是实例。
声明类方法 static 意味着:
这意味着静态类方法只能访问其定义的类中的类成员,而普通的类方法可以访问派生类中的重写类成员。
在Delphi文档中还有其他非正式的静态用法,通常指的是一个不可加入的特征(是一个单词?)。例如静态数组与动态数组。除非另有声明,否则Delphi中的所有实例方法都是静态的。
答案 2 :(得分:2)
在VB.NET中,Static
变量就像C ++本地静态变量一样。
但是,没有全班Static
;请改用Shared
。
答案 3 :(得分:2)
在C#中,有三种方法可以使用静态关键字:
希望这会有所帮助。
答案 4 :(得分:1)
在C#中,它几乎总是意味着:“与类型相关而不是类型的实例”。
答案 5 :(得分:1)
Python有装饰器@staticmethod,当应用于类成员时,使该方法在类而不是实例上可用,并且不向该方法传递自动参数。 @classmethod装饰器执行类似的功能,但是将类作为第一个参数传递,使其更有用。
答案 6 :(得分:1)
在C中,static将函数或全局变量标记为其所在文件的本地变量。
在其他语言中有点像私人。几分。
如果它在一个函数中,那么static会在二进制文件的数据部分预先分配该变量,而不是在运行时在堆栈上预分配。
答案 7 :(得分:1)
在VB.NET中,静态使用过程级别来表示变量与过程的所有执行相关联(它从调用到调用保留)。这虽然是面向对象应用程序中的一种神秘用法。
对应方是“共享”,这意味着方法或成员是类型级别(您不需要实例来访问它)。
答案 8 :(得分:0)
维基百科总结了static
的许多不同含义: