我正在为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 {};)
使用
T dummy{};
return dummy;
如果T
是原始类型或POD类型,则它将被初始化为零。它T
是一个带有默认构造函数的类,它将使用默认构造函数进行初始化。
您可以将这两行简化为:
return {};
对于pre-C ++ 11编译器,请使用:
return T();
由于(根据评论)你需要在C ++ 98中这样做,你可以使用类似的东西:
T dummy = T();
return T;
...要不就:
return T();
但请注意,另一种看似显而易见的替代方案:
T dummy();
return dummy;
...不管用。这不是定义一个名为dummy
的零初始化变量,而是声明一个名为dummy
的函数,它返回一个T
(你可能想搜索“最烦恼的解析”以获取更多相关信息)。