取决于上下文:
像C++很多事情,static
意味着不同的事情取决于它的上下文。
对于同一个词来说,在C++中非常常见,这取决于上下文的含义。
例如:
*
用于乘法,解除引用一个指针,和创建指针。
&
用于获取变量的地址,声明参考以及作为按位AND运算符。
全球使用静态:
如果声明函数和变量作为一个类的静态之外,在全球范围内,它是特定于只文件。如果您尝试在其他文件中使用该变量或函数(通过前向声明),将会出现链接错误。
例子:
a.cpp:
static void fn()
{
cout<<"hello a!"<<endl;
}
b.cpp:
void fn();
void gn()
{
fn();//causes linking error
}
此功能允许您使用,没有其他的文件永远不会看到一个功能,这样你不引起可能的多次定义符号的链接器错误。要做到这一点的最佳方法是采用匿名的命名空间,但:
a.cpp:
namespace
{
void fn() // will be static to a.cpp
{
cout<<"hello a!"<<endl;
}
}
类内部用静态的:
如果声明函数或变量为静态的内部类(或结构体),它是一个类函数或类变量。这意味着整个班级只有一个。一个类函数只能使用类变量。类变量在该类的所有实例中共享。
class C
{
public:
static void fn()
{
y = 4;//<--- compiling error
// can't access member variable within a static function.
}
int y;
}
这是一个伟大的功能,如果你有一些是具体到你的类的对象,而不是具体的一个实例使用。
内部功能使用的静态:
如果你声明一个函数内部的变量作为静态的,你可以考虑的变量值将在通话持续。它只会被初始化一次。
例子:
//Will print 0, then 1, then 2, ...
void persistentPrintX()
{
static int x = 0;
cout << x << endl;
x++;
}
我个人尽量避免这种情况,你可能应。拥有全球化的国家并不好。具有相同输入保证相同输出的函数会更好。
就像在英语:
的上下文相关的含义的概念并不具体到C++,你甚至可以看到它在英语语言。
- 我要
screen
电影(意味着显示出电影)
- 电视上的
screen
坏了(指电视机的一部分)在其他编程语言
其他的含义:
根据编程语言的不同,可能会有不同的含义,但大多数人认为当你说static
是第一类vari能够/函数vs成员变量/函数。
您是否具体询问在类/结构之外声明的函数? – Bill 2010-02-10 14:53:00
我一般都在问,谢谢你的评论,但是Brian已经回答了我的问题。 – Dooms101 2010-02-10 15:27:53