Причина, по которой на выходе выводится 111
(в отличие от 123
), заключается в том, что Sample<int>
, Sample<float>
и Sample<char>
- это три совершенно разных типа, и, следовательно, каждый из них имеет свою собственную, отдельную статическую переменную называется i
.
У вас есть шаблон с именем Sample
, и каждый раз, когда вы создаете его экземпляр с другим аргументом шаблона, он использует этот шаблон для создания нового класса на лету на основе шаблона. Но классы, созданные с использованием шаблона, не имеют отношения друг к другу и не передают статическую информацию.