C++ C++;模板默认构造函数

C++ C++;模板默认构造函数,c++,templates,constructor,default,keyword,C++,Templates,Constructor,Default,Keyword,我对模板有点问题: template <typename T> T Func(){ std::string somestr = ""; // somestr = ... if (somestr != ""){ return boost::lexical_cast<T>(somestr); } else{ T ret; // warning: "ret may be uninitialized in

我对模板有点问题:

template <typename T>
T Func(){
    std::string somestr = "";
    // somestr = ...
    if (somestr != ""){ 
        return boost::lexical_cast<T>(somestr);
    }
    else{
        T ret; // warning: "ret may be uninitialized in this function"
        return ret;
    }
}

谢谢

ret
可能未初始化,因为
T
可能是POD类型或没有用户声明构造函数的其他类型

您可以调用默认构造函数(并初始化任何POD类型对象的值),如下所示:

或者更简洁地说

return T();
这假设
T
是默认可构造的。如果您可能需要使用不可默认构造的类型实例化此函数,则可以将“default”案例作为参数。比如说,

template <typename T>
T Func(const T& default_value = T())
{
    // ...
}
模板
T Func(常数T&默认值=T())
{
// ...
}
这将允许您仍然为默认可构造的类型调用
Func()
,但也可以为不可构造的类型显式提供返回值

return T();
template <typename T>
T Func(const T& default_value = T())
{
    // ...
}