我知道你通常在.cpp文件中初始化一個靜態成員變量。但我的問題是:爲什麼你有?你爲什麼要初始化一個C++靜態成員變量?
下面是一個例子:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
main() {
int sz = A::x.size();
}
這給出了一個編譯器錯誤:undefined reference to 'A::x'
然而,這樣的:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
// Initialize static member
vector<int> A::x;
main() {
int sz = A::x.size();
}
編譯並運行良好。
我可以理解,如果我使用默認的構造函數以外的東西初始化矢量,但我不是。我只想創建一個大小爲0的矢量。當然,任何靜態成員都必須在程序初始化時分配內存,爲什麼編譯器不使用默認構造函數?
+1,但你應該刪除其中一個dups。對於對象,RAII會進行初始化(即使只是默認的構造函數)也是定義的結果。這是否適用於原始指針,像int這樣的內建類型? – 2010-11-04 15:30:02
我的意思是你可以在那裏添加初始化。我會添加精度。 – Klaim 2010-11-04 15:45:07
@Steve POD類型的構造函數只是語法的,所以是的,它確實有效,但它實際上並沒有做任何事情(或者更準確地說,它被允許什麼也不做 - 通過C++標準)。 – 2010-11-04 19:06:16