На этом шаге мы рассмотрим определение шаблонов вложенных классов и явную инициализацию базовых типов.
Вложенные классы тоже могут оформляться в виде шаблонов:
template <class T> class MyClass { . . . template <class T2> class NestedClass; . . . };
При явном вызове конструктора без аргументов базовые типы инициализируются нулями:
int i1; // Неопределенное значение int i2 = int(); // Переменная инициализируется нулем
Такая возможность была реализована для того, чтобы вы могли написать код шаблона, в котором величине любого типа заведомо будет присвоено некоторое значение по умолчанию. Например, в следующей функции вызов конструктора гарантирует, что для всех базовых типов переменная х будет инициализирована нулем:
template <class T> void f() { Т х = Т(): . . . }
На следующем шаге мы рассмотрим обработку исключений.