警告:'dymmy'可能会在此功能中未经初始化使用

时间:2018-03-02 17:58:56

标签: c++

我正在为Stack类编写一个程序,我的一个模板函数是这样的:

template<class T, int initialsize>
T Stack<T, initialsize>::back()
{
    if (where >= 0)
    {
        return ptr[where];
    }
    T dummy;
    return dummy;
}

但我收到的警告说:

|102|warning: 'dummy' may be used uninitialized in this function

我已将它初始化为T类,为什么会发生这种情况,我该怎么做才能解决它?

*请注意,我必须在旧版本的C ++中执行此操作,因此不能使用C ++ 11及更高版本(不能使用return {};)

2 个答案:

答案 0 :(得分:5)

使用

T dummy{};
return dummy;

如果T是原始类型或POD类型,则它将被初始化为零。它T是一个带有默认构造函数的类,它将使用默认构造函数进行初始化。

您可以将这两行简化为:

return {};

对于pre-C ++ 11编译器,请使用:

return T();

答案 1 :(得分:4)

因为(根据评论)你需要在C ++ 98中这样做,你可以使用类似的东西:

return T();

......或只是:

T dummy();
return dummy;

但请注意,另一种看似显而易见的替代方案是:

dummy

...将工作。这不是定义一个名为dummy的零初始化变量,而是声明一个名为T的函数,它返回<div>(您可能希望搜索&#34;最烦恼的解析&#34; for更多关于这个)。