Trong chương trình sau "Here" được in:C++ biến tĩnh của lớp unreferenced
#include <iostream>
class Base
{
static bool temp;
static bool initTemp()
{std::cout<<"Here\n";return true;}
};
bool Base::temp = Base::initTemp();
class Derived : public Base
{};
int main() {int a;std::cin>>a;}
Trong chương trình sau "Ở đây" không được in:
#include <iostream>
template <class T>
class Base
{
static bool temp;
static bool initTemp()
{std::cout<<"Here\n";return true;}
};
template <class T>
bool Base<T>::temp = Base<T>::initTemp();
class Derived : public Base<int>
{};
int main() {int a;std::cin>>a;}
Trong cả hai trường hợp cơ sở không bao giờ được tham chiếu. Sự khác biệt duy nhất là trong trường hợp thứ hai nó là một lớp mẫu. Bất cứ ai có thể giải thích cho tôi tại sao hành vi này xảy ra. Tôi đang sử dụng VS 2012.
'void main()' không hợp pháp C++. Nên là 'int main()'. –
Trong ví dụ thứ hai, "Ở đây" được in nếu bạn nhanh chóng khởi tạo thành viên tĩnh: 'template bool Base :: temp;' –
willj