我正在为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 {};)
答案 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更多关于这个)。