如果你把一個函式分配給一個變數,會發生什么,如下圖所示
unsigned char uchHeaderVer;
uchHeaderVer = GetCodec(Page.Version)。
BYTE CWAV::GetCodec(BYTE byVersion)
{
RecorderInfoMap::iterator it;
if ((it = m_mapRecInfo.find(byVersion)) != m_mapRecInfo.end() ) {
return (BYTE) ((*it).second.nCodec)。
} else {
return 4;
}
}
版本是BYTE型別,存盤在一個typedef結構中
uj5u.com熱心網友回復:
每個函式,如果沒有定義為回傳void,就必須回傳一個值,回傳值的型別在函式宣告的開始就被宣告。
int some_func(){
// ^^ 這是回傳變數的型別。
return 1。
}
在你的案例中發生的事情只是將GetCodec(Page.Version)的回傳值分配給uchHeaderVer。而如果uchHeaderVer和GetCodec(Page.Version)的型別不匹配,將發生一個轉換,如果轉換不可能,你將得到一個編譯時錯誤。
uj5u.com熱心網友回復:
如果函式回傳一個值,并且它與變數型別相匹配(或可以被轉換),那么這個值將被分配給這個變數,如果不是,代碼將不能編譯。 例子 :
error: cannot convert 'std::string {aka std::basic_string}' to 'int' in assignment
如果該函式回傳void,你也會得到一個錯誤 :
error: void values not ignored as it ought be
uj5u.com熱心網友回復:
如果你把一個函式分配給一個變數,會發生什么,如下圖所示
你沒有將一個函式分配給一個變數。你是在呼叫一個函式,并將結果分配給該變數。
你還沒有說明
BYTE是什么,但是它很可能是unsigned char(或者可能是char)的一個型別別名。你不能將一個函式分配給一個變數,因為函式不是物件。你只能將函式的指標分配給變數,比如說
BYTE (*pGetCodec)(BYTE) = & CWAV::GetCodec; auto pGetCodec2 = &CWAV::GetCodec; using GetCodecF = BYTE (*)(BYTE)。 GetCodecF pGetCodec3 = &CWAV::GetCodec;轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/333760.html
標籤:
