जीसीसी 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;
}
इस मामले में हम stdout में किसी भी उत्पादन नहीं होगा। अगर हम इस तरह initializations बदल देंगे संकलक नाव और वर्ग ए के दोहरे विशेषज्ञता
लेकिन .. प्रारंभ करने में कोड उत्पन्न नहीं होगा:
template<> B<float> A<float>::static_var = B<float>();
template<> B<double> A<double>::static_var = B<double>();
संकलक इस तरह के कोड उत्पन्न होगा और हम होगा आउटपुट में डबल "बी()"।
क्या कोई इस तरह के व्यवहार को समझने में मेरी सहायता कर सकता है?
अपने जवाब के लिए धन्यवाद का उपयोग कर सकते हैं! – Ribtoks
तो यदि आप डिफ़ॉल्ट कन्स्ट्रक्टर (सी ++ 11 के बिना) द्वारा 'x' प्रारंभ करना है) तो आप क्या करते हैं? – VF1