最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
江津市| 平利县| 云梦县| 万荣县| 安新县| 日土县| 额敏县| 天镇县| 呼图壁县| 平武县| 连江县| 建阳市| 襄垣县| 连江县| 新田县| 肇东市| 青州市| 谷城县| 天津市| 祁阳县| 新巴尔虎右旗| 子洲县| 太和县| 永胜县| 阳高县| 互助| 江山市| 洛扎县| 台南市| 定州市| 温宿县| 巍山| 廉江市| 南汇区| 平邑县| 澎湖县| 吴江市| 西峡县| 渭南市| 绥江县| 富裕县|