В следующей программе «Здесь» печатается:C++ статические переменные без ссылок класса
#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;}
В следующей программе «Здесь» не печатается:
#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;}
В обоих случаях база никогда ссылки. Единственное различие заключается в том, что во втором случае это шаблонный класс. Может ли кто-нибудь объяснить мне, почему это происходит. Я использую VS 2012.
'void main()' не является законным C++. Должно быть 'int main()'. –
Во втором примере «Здесь» печатается, если вы явно создаете статический член: 'template bool Base :: temp;' –
willj