gcc 4.5.1, SuSE Linux i686C++ template thành viên tĩnh khởi vấn đề
Giả sử chúng tôi đã mã sau:
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;
}
Trong trường hợp này, chúng ta sẽ không có bất kỳ đầu ra trong stdout. Trình biên dịch sẽ không tạo ra mã để khởi phao và chuyên môn đôi của lớp A.
Nhưng .. nếu chúng ta sẽ thay đổi khởi tạo như thế này:
template<> B<float> A<float>::static_var = B<float>();
template<> B<double> A<double>::static_var = B<double>();
trình biên dịch sẽ tạo ra mã như vậy và chúng tôi sẽ có double "B()" ở đầu ra.
Ai đó có thể giúp tôi hiểu về hành vi như vậy không?
Cảm ơn câu trả lời của bạn! – Ribtoks
Vậy bạn sẽ làm gì nếu 'x' được khởi tạo bởi hàm tạo mặc định (không có C++ 11)? – VF1