在以下程序中打印“Here”:
#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;}
在以下程序中不打印“Here”:
#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;}
在这两种情况下,都不会引用 Base 。唯一的区别是在第二种情况下它是一个模板类。谁能向我解释为什么会发生这种行为。我正在使用 VS 2012。