考慮一個變量由一個.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