我对模板有一点小问题:
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可能在这个函数中未初始化“。Try-Catch无助于删除警告..
有没有像C#中的default关键字这样的方法呢?
return default(T); // C#谢谢!
发布于 2010-08-10 09:16:00
ret可能未初始化,因为T可能是POD类型或没有用户声明的构造函数的其他类型。
您可以调用默认构造函数(并对任何POD类型对象进行值初始化),如下所示:
T ret = T();
return ret;或者,更简洁地说,
return T();这假设T是默认可构造的。如果您可能需要使用不可默认构造的类型来实例化此函数,则可以将" default“case作为参数。例如,
template <typename T>
T Func(const T& default_value = T())
{
// ...
}这将允许您仍然为默认可构造的类型调用Func(),但也可以显式地为不可构造的类型提供返回值。
https://stackoverflow.com/questions/3445348
复制相似问题