我目前有一個函數,是爲了返回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
}
當我步執行代碼試圖測試如果MSG被輸出和錯誤檢查是在第一檢查(m_iCurrentSize> 0)失敗,則消息打印出來,然後它跳轉到函數「}」的末尾並且什麼也不返回?
通常我會得到一個編譯錯誤,說它必須返回一些東西。這裏發生了什麼,可以嗎?
雖然它實際上並沒有進入任何返回T的東西,但它確實返回了一些東西,但也可能是隨機存儲器地址。
好的。只是不知道在某些時候沒有返回的東西就可以編譯。堆棧可能因爲返回的內容而損壞,或者是幕後發生的其他問題導致問題? –
@Ben Y:你正在調用未定義的行爲,所以會發生什麼......好吧,未定義!實際發生的事情取決於實現,調用約定等。堆棧**可能由於脫落返回某個東西的函數而被破壞,而實際上沒有返回任何東西。 –