五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
平果县| 宜州市| 辉南县| 安图县| 湘乡市| 青河县| 孟村| 临猗县| 内黄县| 广河县| 长宁区| 化州市| 边坝县| 古丈县| 海晏县| 德江县| 洛南县| 翼城县| 融水| 泉州市| 甘谷县| 杭锦旗| 太谷县| 高要市| 舟山市| 府谷县| 隆尧县| 沙雅县| 西宁市| 罗定市| 磴口县| 大渡口区| 永仁县| 达州市| 来宾市| 铜陵市| 马山县| 敦煌市| 潼南县| 青田县| 星子县|