五月天青色头像情侣网名,国产亚洲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ó)家法律
扬中市| 商丘市| 利津县| 松潘县| 开封市| 松原市| 疏勒县| 万山特区| 宜宾市| 丹东市| 平南县| 广平县| 陆丰市| 沙田区| 盐津县| 宁安市| 平湖市| 玉田县| 泌阳县| 朝阳县| 清水县| 衡南县| 鞍山市| 交口县| 卢龙县| 崇明县| 宁强县| 赣州市| 略阳县| 丁青县| 城口县| 陵川县| 晋宁县| 渝中区| 平罗县| 辽中县| 扎兰屯市| 沾益县| 栾城县| 彩票| 察隅县|