考虑一个变量由一个.cpp
文件处理,而其他.cpp
文件将该变量的值用于各种目的。两个源文件(类和全局)之间的变量
当与类一起使用
// header.h
class c {
public:
static int f1();
static int f2();
private:
static int v;
};
// first.cpp
int c::v(0);
int c::f1() { return ++v; }
// second.cpp
int c::f2() { return ++v; }
// main.cpp
int main() {
cout << c::f1() << endl;
cout << c::f2() << endl;
return 0;
}
输出是:
1
2
当在全局范围内使用
// header.h
int f1();
int f2();
static int v = 0;
// first.cpp
int f1() { return ++v; }
// second.cpp
int f2() { return ++v; }
// main.cpp
int main() {
cout << f1() << endl;
cout << f2() << endl;
return 0;
}
输出是:
1
1
为什么当所述变量是一个类,输出的是你期待什么,否则就不是? (我知道的是,在第二部分使用extern
会给想要的结果,问题是相当为什么static
作品的情况下,与类别,但不能与全球范围内?)
我理解正确:每个文件都有自己的这个变量的副本吗?所以,如果OP在哪里把'f1()'和'f2()'放在同一个文件中,那么他实际上会得到'1'和'2'作为输出?而且,如果他没有将'v'声明为'static',那么所有的文件都会共享这个变量,并且输出将会是'1'和'2'? – dingalapadum
@dingalapadum我完全同意第一部分。至于第二部分,并不完全 - 你原则上可能是对的,但在这种情况下,链接器会抱怨有多个定义的变量。 –
我明白了。谢谢! – dingalapadum