无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

關(guān)于C++中使用CRTP遇到 void value not ignored as it ought to be 錯(cuò)誤的疑難解答

2023-06-24 00:47 作者:春江花月夜-ac  | 我要投稿

????出現(xiàn) void value not ignored as it ought to be 錯(cuò)誤是因?yàn)楹瘮?shù)返回值為 void 類型,而你對(duì)這個(gè) void 類型的“返回值”進(jìn)行了操作(包括賦值、強(qiáng)制轉(zhuǎn)換、運(yùn)算等),通常人們說(shuō)出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)槟憬o某個(gè)變量賦值了 void 返回類型的函數(shù)值,例如:

void func()

{}

int i = func()

由于 func() 返回值類型為 void ,因此 func() 不能賦值給任何變量,否則編譯器會(huì)報(bào)錯(cuò) void value not ignored as it ought to be 。

????但在實(shí)踐中這個(gè)錯(cuò)誤可能不是以這樣明顯的方式出現(xiàn),近日我在使用CRTP時(shí)候,發(fā)現(xiàn)如下代碼會(huì)報(bào)錯(cuò) void value not ignored as it ought to be

Derived為CRTP中的子類類型

仔細(xì)一看好像沒(méi)有什么問(wèn)題,但編譯時(shí)會(huì)報(bào)錯(cuò)?void value not ignored as it ought to be ,這個(gè)問(wèn)題困擾了我很久,后來(lái)我發(fā)現(xiàn)可能是因?yàn)檫\(yùn)算優(yōu)先級(jí)導(dǎo)致的,即上面的代碼實(shí)際被解釋為

(Derived*)(?this->initialize() );

即先調(diào)用 this->initialize() ,然將其返回的 void 強(qiáng)制轉(zhuǎn)換為 Derived* 指針,很顯然這是在對(duì) void 進(jìn)行強(qiáng)制轉(zhuǎn)換,是錯(cuò)誤的,正確的寫(xiě)法應(yīng)該是

將(Derived*)this括起來(lái)

此時(shí)編譯器將通過(guò)編譯。

????但還有一個(gè)比較疑惑的問(wèn)題是,下面的代碼沒(méi)有將 (Derived*)this 括起來(lái),但是卻成功通過(guò)編譯并運(yùn)行了,我還不知道為什么,希望有知道的朋友可以在評(píng)論區(qū)解惑,感激不盡!

編譯通過(guò)并輸出 Derived

????總的來(lái)說(shuō)為了安全起見(jiàn),最好是寫(xiě)成 ((Derived*)this)->initialize();?的形式,這個(gè)括號(hào)不加有可能不報(bào)錯(cuò)也有可能報(bào)?void value not ignored as it ought to be?,但多加個(gè)括號(hào)一定不會(huì)出錯(cuò)。

關(guān)于C++中使用CRTP遇到 void value not ignored as it ought to be 錯(cuò)誤的疑難解答的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
鸡西市| 惠水县| 东方市| 云林县| 龙川县| 隆回县| 石台县| 吉林省| 司法| 礼泉县| 南华县| 扶绥县| 安化县| 济南市| 抚远县| 西贡区| 化州市| 泗洪县| 阿拉尔市| 南丹县| 诸暨市| 香港 | 彰武县| 贵溪市| 乾安县| 太白县| 嵊州市| 西宁市| 万安县| 丹凤县| 漳平市| 刚察县| 金湖县| 阿坝县| 鸡泽县| 新巴尔虎右旗| 商丘市| 南投市| 满洲里市| 建昌县| 永兴县|