C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析
本文主要給大家介紹了關(guān)于C++11中std::declval實(shí)現(xiàn)機(jī)制的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:
在vs2013中,declval定義如下
template <_Ty> typenamea dd_rvalue_reference<_Ty>::type declval() _noexcept;
其中,add_rvalue_reference為一個(gè)traits,定義為
template <_Ty>
struct add_rvalue_reference
{
typedef _Ty&& type;
}
可見(jiàn),declval被定義為一個(gè)函數(shù),并且只有申明,沒(méi)有實(shí)現(xiàn)(在gcc 版本中似乎有實(shí)現(xiàn),但是也不能在運(yùn)行時(shí)調(diào)用——通過(guò)靜態(tài)斷言實(shí)現(xiàn))。那么,問(wèn)題來(lái)了,為什么這樣定義呢,為什么不直接使用模板參數(shù)指定的,揣測(cè)原因如下:
通過(guò)函數(shù)返回值,實(shí)際上是等同于實(shí)例化了這個(gè)類型的一個(gè)對(duì)像,進(jìn)而可以用這個(gè)對(duì)像調(diào)用成員方法,成員變量。這個(gè)方法最妙的地方在于不論類型的構(gòu)造如何定義甚至有無(wú)構(gòu)造都能獲得這個(gè)類型的一個(gè)對(duì)像的引用實(shí)例。
其實(shí),也有其它方法可以得到類似的效果。
class Klass
{
public:
int m_a;
//parameter defined
//member function
}
假如有上的一個(gè)類,可以通過(guò)下面的方法引用到成員變量m_a:
((Klass*)0)->m_a;
這也是在c語(yǔ)言中獲取結(jié)構(gòu)體成員的地址偏移量的常用技巧,但是有魔鬼數(shù)字和類型強(qiáng)轉(zhuǎn),不如declval來(lái)得優(yōu)雅。
當(dāng)然這一切都只能是在編譯期蹦噠。declval常和c++11新引入的decltype配合。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
概率的問(wèn)題:使用遞歸與多次試驗(yàn)?zāi)M的分析
以下對(duì)概率的問(wèn)題:使用了遞歸和多次試驗(yàn)?zāi)M。需要的朋友參考下2013-05-05
c++元編程模板函數(shù)重載匹配規(guī)則示例詳解
這篇文章主要為大家介紹了c++元編程模板函數(shù)重載匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入兩個(gè)數(shù)字將其按從小到大輸出的方法,本文通過(guò)代碼講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
簡(jiǎn)明的C++函數(shù)指針學(xué)習(xí)教程
這篇文章主要介紹了C++函數(shù)指針的學(xué)習(xí)教程,講到了函數(shù)指針的定義及把指針作為函數(shù)參數(shù)進(jìn)行傳遞的用法,需要的朋友可以參考下2016-04-04
C++返回值是類名和返回值是引用的區(qū)別及說(shuō)明
這篇文章主要介紹了C++返回值是類名和返回值是引用的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C語(yǔ)言聯(lián)合體類型的實(shí)現(xiàn)
聯(lián)合體也是一種構(gòu)造數(shù)據(jù)類型,和結(jié)構(gòu)體類型一樣,它也是由各種不同類型的數(shù)據(jù)組成,本文主要介紹了C語(yǔ)言聯(lián)合體類型的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
C++實(shí)現(xiàn)頁(yè)面的緩沖區(qū)管理器
這篇文章主要介紹了C++實(shí)現(xiàn)頁(yè)面的緩沖區(qū)管理器,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

