首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++模板默认构造函数

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

Stack Overflow用户
提问于 2010-08-10 09:13:29
回答 1查看 5.4K关注 0票数 9

我对模板有一点小问题:

代码语言:javascript
复制
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关键字这样的方法呢?

代码语言:javascript
复制
return default(T); // C#

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-10 09:16:00

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

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

代码语言:javascript
复制
T ret = T();
return ret;

或者,更简洁地说,

代码语言:javascript
复制
return T();

这假设T是默认可构造的。如果您可能需要使用不可默认构造的类型来实例化此函数,则可以将" default“case作为参数。例如,

代码语言:javascript
复制
template <typename T>
T Func(const T& default_value = T())
{
    // ...
}

这将允许您仍然为默认可构造的类型调用Func(),但也可以显式地为不可构造的类型提供返回值。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3445348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档