ret
может быть неинициализировано, поскольку T
может быть типом POD или другим типом, который не имеет объявленных пользователем конструкторов.
Вы можете вызвать конструктор по умолчанию (и инициализировать значение любого объекта типа POD) следующим образом:
T ret = T();
return ret;
или, более кратко,
return T();
Предполагается, что T
является конструируемым по умолчанию. Если вам может потребоваться создать экземпляр этой функции с типом, который не является конструируемым по умолчанию, вы можете взять регистр «по умолчанию» в качестве параметра. Например,
template <typename T>
T Func(const T& default_value = T())
{
// ...
}
Это позволит вам по-прежнему вызывать Func()
для типов, которые являются конструктивными по умолчанию, но также явно указывать значение, возвращаемое для типов, которые не являются.