10
GCC 4.5.1,在SuSE Linux的i686C++静态模板成员初始化问题
假设我们有下面的代码:
template<typename realT> class B
{
public:
B() {std::cout << "B()" << std::endl;}
};
template<typename realT> class A
{
public:
static B<realT> static_var;
};
template<typename realT> B<realT> A<realT>::static_var;
template<> B<float> A<float>::static_var;
template<> B<double> A<double>::static_var;
int main()
{
A<float> test;
return 0;
}
在这种情况下,我们不会在标准输出的任何输出。编译器不会生成代码来初始化float和A级的双专业化
但是..如果我们将改变这样的初始化:
template<> B<float> A<float>::static_var = B<float>();
template<> B<double> A<double>::static_var = B<double>();
编译器将生成这样的代码,我们将有在输出中双“B()”。
有人能帮助我理解这种行为吗?
感谢您的回答! – Ribtoks
那么如果'x'被默认的构造函数初始化(没有C++ 11),你该怎么做? – VF1