警告:'dummy'可能在此函数中未初始化使用

问题描述 投票:-1回答:2

我正在为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 {};)

c++
2个回答
5
投票

使用

T dummy{};
return dummy;

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

您可以将这两行简化为:

return {};

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

return T();

4
投票

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

T dummy = T();
return T;

...要不就:

return T();

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

T dummy();
return dummy;

...不管用。这不是定义一个名为dummy的零初始化变量,而是声明一个名为dummy的函数,它返回一个T(你可能想搜索“最烦恼的解析”以获取更多相关信息)。

© www.soinside.com 2019 - 2024. All rights reserved.