考慮下面的代碼:模板類的靜態變量的初始化,C++
//header.h
template<class T>
class A
{
static int x;
};
template<class T>
int A<T>::x = 0;
//source1.cpp
#include "header.h"
void f(){} // dummy function
//main.cpp
#include "header.h"
int main(){}
在這種情況下,代碼完全編譯沒有錯誤,但如果我從類
class A
{
static int x;
};
int A::x = 0;
- 除去模板預選賽這種情況下,編譯器錯誤地定義了x的多個定義。任何人都可以解釋這種行爲嗎?
- 當模板類的靜態變量被初始化/實例化?
1)類模板成員只在需要的時候被實例化。 2)這是一個棘手的問題。 –
[模板靜態變量](http://stackoverflow.com/questions/1553854/template-static-variable) – Quentin
可能的重複總之,**永遠**實例化頭文件中的靜態,這幾乎每次都會造成麻煩。每次包含頭文件時,靜態都會被實例化。 – bkausbk