在线亚洲黄色-在线亚洲观看-在线亚洲电影-在线亚洲成人-岛国大片在线观看免费版-岛国大片在线播放高清

深入淺出C++模板元編程(3)

導(dǎo)讀在C++中,unevaluated expressions如sizeof、typeid和decltype等,雖然不會對操作數(shù)進(jìn)行實際計算,但它們的expression context仍然完整。例如,當(dāng)嘗試在expression context中創(chuàng)建一個沒有默認(rèn)構(gòu)造函數(shù)的類對象時,sizeof會檢查構(gòu)造函數(shù)的正確性,即使實際上并不執(zhí)行。這種特性允許我們通過元編程實現(xiàn)對默認(rèn)構(gòu)造函數(shù)的檢查。一個檢測默認(rèn)構(gòu)造函數(shù)的例子是,盡管std::vector可以存儲沒有默認(rèn)構(gòu)造函數(shù)的類型,但在嘗試使用默認(rèn)初始化創(chuàng)建一個std::vector時,編譯器會給出明確的錯誤。通過使用SFINAE,可以通過嘗試構(gòu)建一個0(一個默認(rèn)構(gòu)造函數(shù)可以接受的值)來判斷類型是否支持默認(rèn)構(gòu)造。

SFINAE在C++模板元編程中的應(yīng)用非常廣泛。在前面的內(nèi)容中,我們探討了如何使用SFINAE通過expression SFINAE檢查函數(shù)重載。接下來,我們將深入討論如何利用expression SFINAE檢測類的構(gòu)造函數(shù)特性,特別是默認(rèn)構(gòu)造函數(shù)的存在性。在C++中,unevaluated expressions如sizeof、typeid和decltype等,雖然不會對操作數(shù)進(jìn)行實際計算,但它們的expression context仍然完整。例如,當(dāng)嘗試在expression context中創(chuàng)建一個沒有默認(rèn)構(gòu)造函數(shù)的類對象時,sizeof會檢查構(gòu)造函數(shù)的正確性,即使實際上并不執(zhí)行。這種特性允許我們通過元編程實現(xiàn)對默認(rèn)構(gòu)造函數(shù)的檢查。一個檢測默認(rèn)構(gòu)造函數(shù)的例子是,盡管std::vector可以存儲沒有默認(rèn)構(gòu)造函數(shù)的類型,但在嘗試使用默認(rèn)初始化創(chuàng)建一個std::vector時,編譯器會給出明確的錯誤。通過使用SFINAE,我們可以通過嘗試構(gòu)建一個0(一個默認(rèn)構(gòu)造函數(shù)可以接受的值)來判斷類型是否支持默認(rèn)構(gòu)造。在實現(xiàn)上,我們定義了try_construct函數(shù)的兩個重載版本,一個接受void*,另一個接受任意數(shù)量和類型的參數(shù)。編譯器會根據(jù)默認(rèn)參數(shù)類型選擇最匹配的版本。在嘗試構(gòu)建0的表達(dá)式中,編譯器會檢查U()是否為一個合法的表達(dá)式,從而確定類型是否能被默認(rèn)構(gòu)造。此外,std::declval是一個有用的工具,它允許我們在expression context中提供未構(gòu)造的對象,而不會觸發(fā)構(gòu)造。通過std::declval,我們可以創(chuàng)建一個左值引用,避免對析構(gòu)函數(shù)的檢查,從而完成構(gòu)造函數(shù)屬性的檢測。總結(jié)來說,expression SFINAE的強(qiáng)大之處在于其能夠檢查各種表達(dá)式的合法性,為現(xiàn)代C++的模板元編程提供了強(qiáng)大支持。不過,需要注意的是,這些技術(shù)的代碼主要用于教學(xué),不應(yīng)直接用于實際項目,因為它們可能沒有標(biāo)準(zhǔn)庫的穩(wěn)定性和優(yōu)化。在實際應(yīng)用中,可能還需要結(jié)合C++的其他特性,如is_constructible和void_t,以實現(xiàn)更高效和安全的代碼。

為你推薦
資訊專欄
熱門視頻
相關(guān)推薦
葬禮禁忌葬禮有什么禁忌 devc++5.11下載 main函數(shù)的參數(shù)是實參還是形參 C++中\(zhòng)"std::\"是什么意思?起什么作用? statar601錯誤 為什么白事不能吃肉 家里有白事沒過三年可以喝酒吃肉嗎 辦喪事為什么不要吃牛肉? 吊唁的方式有哪些? str1和strl是什么意思,為什么我怎么輸入都是正確的 linux賦值多行 Linux輸出重定向?qū)⒔Y(jié)果保存到文件中l(wèi)inux輸出重定向到文件 ae文字跳躍特效該怎么做?AfterEffects做跳躍繩索文字的教程 -std=gnu++11是什么東西 老人去世了能結(jié)婚么? res+和set-是什么意思 devc調(diào)試是什么意思? 老人去世晚上能出去么? C++數(shù)轉(zhuǎn)化為字符串 家里人今天死了去能出門嗎? 有關(guān)auto和decltype的幾個問題求助 stata命令匯總有哪些? 參加葬禮應(yīng)該說什么好呢 細(xì)節(jié)布依族文化布依族悠久的喪葬習(xí)俗 夢見家有喪事的預(yù)兆 孝子為什么不能吃豬油 家里死人不能辦喜事嗎? stata命令:destring字符型變量轉(zhuǎn)換為數(shù)量型變量 家里有喪事怎么通知朋友 《禮記·檀弓上》13 stata esttab 怎么用 辦理喪事的風(fēng)水講究有哪些? stata之中介效應(yīng)分析 家里老人多于年輕人,房間里總是有一股味道,他們說改不掉了,如何處理這些味道? 屋里有老人通風(fēng)不好味道不好,買個加濕器有用嗎?可以凈化空氣嗎 stata如何將數(shù)據(jù)分析結(jié)果導(dǎo)出到word中? obs*R-squared是什么意思 老年人會有老年味,你知道遠(yuǎn)離老年味需要做哪些事嗎? obs可以導(dǎo)出照片嗎 STP是什么意思?(化學(xué)老師提出來的)
Top 主站蜘蛛池模板: 又黄又爽免费视频 | 久久精品无码一区二区日韩av | 亚洲综合一区二区精品久久 | 国产精品色综合久久 | 欧美亚洲综合图区在线 | 精品一区二区免费视频 | 国产毛片久久久久久国产毛片 | 欧美精品一区二区在线观看 | 国产亚洲欧美日韩俺去了 | 亚洲欧美另类日韩 | 久久一本日韩精品中文字幕屁孩 | 欧美精品在线一区 | 亚洲欧美啪啪 | 欧美综合在线观看 | 日韩网址 | 一本一道| 国产精品亚洲一区二区在线观看 | 亚洲视频在线观看视频 | 香港黄色| 中文字幕高清 | 精品国产网站 | 亚洲第一区视频在线观看 | 欧美xxx性 | 国产精品免费看 | 欧美日韩欧美日韩 | 国产精品毛片va一区二区三区 | 日韩欧美网站 | 免费在线观看中文字幕 | 久久这里只有精品国产 | 日本国产一区二区三区 | 亚洲视频在线观看 | 国产在线精品一区二区三区 | 国产成人精品亚洲一区 | 国产一区 在线播放 | 国产产一区二区三区久久毛片国语 | 91久久国产综合精品女同国语 | 特一级大黄在线观看 | 精品国产综合成人亚洲区 | 国产精品成久久久久三级 | 成人精品久久 | 欧美一区二区在线播放 |