gpt4 book ai didi

c++函数在应该返回的时候似乎没有返回任何东西

转载 作者:行者123 更新时间:2023-11-30 02:07:37 24 4
gpt4 key购买 nike

我目前有一个旨在返回 T 的函数(模板函数)。所以我一直认为它必须返回一个值,但我最近偶然发现了一些东西。

#define PRINTERROR(msg) \
std::cout << msg << "\n\tFILE: " << __FILE__ << "\n\tLINE: " << __LINE__ << "\n\tTIME: " << __TIME__ << std::endl << std::endl;

还有这个……

template<class T>
T& Container_Vector<T>::GetFirstItem()
{
#ifdef CONTAINER_VECTOR_ERROR_CHECKING_ON

if (m_iCurrentSize > 0)
{
return m_pItems[0];
}
else
{
PRINTERROR("ERROR: Attempting to retrieve item from an empty vector container");
}

#else

return m_pItems[0];

#endif
}

当我单步执行代码以尝试测试消息是否被输出并且错误检查在第一次检查时 (m_iCurrentSize > 0) 失败,消息被打印,然后它似乎跳转到函数的末尾“} “然后什么都不返回?

通常我会得到一个编译错误,说它必须返回一些东西。这是怎么回事,还好吗?

虽然它实际上并没有遍历任何返回 T 的东西,但它确实返回了一些东西,可能是一个随机的内存地址。

最佳答案

您在 #ifdef block 中的 PRINTERROR 之后缺少一个 return。不这样做会导致未定义的行为。您必须在函数结束时返回适当的值。

(此类逻辑错误可以在编译时通过设置适当的标志来捕获。例如,在 g++ 中,您可以使用 -Wall。)

关于c++函数在应该返回的时候似乎没有返回任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com