考虑下面的代码:模板类的静态变量的初始化,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