国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++11中std::declval的實現機制淺析

2020-01-26 14:02:35
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于C++11中std::declval實現機制的相關內容,分享出來供大家參考學習,下面來一起看看詳細的介紹:

在vs2013中,declval定義如下

template <_Ty> typenamea dd_rvalue_reference<_Ty>::type declval() _noexcept;

其中,add_rvalue_reference為一個traits,定義為

template <_Ty>struct add_rvalue_reference{ typedef _Ty&& type;}

可見,declval被定義為一個函數,并且只有申明,沒有實現(在gcc 版本中似乎有實現,但是也不能在運行時調用――通過靜態斷言實現)。那么,問題來了,為什么這樣定義呢,為什么不直接使用模板參數指定的,揣測原因如下:

通過函數返回值,實際上是等同于實例化了這個類型的一個對像,進而可以用這個對像調用成員方法,成員變量。這個方法最妙的地方在于不論類型的構造如何定義甚至有無構造都能獲得這個類型的一個對像的引用實例。
其實,也有其它方法可以得到類似的效果。

class Klass{ public:  int m_a; //parameter defined //member function}

假如有上的一個類,可以通過下面的方法引用到成員變量m_a:

((Klass*)0)->m_a;

這也是在c語言中獲取結構體成員的地址偏移量的常用技巧,但是有魔鬼數字和類型強轉,不如declval來得優雅。

當然這一切都只能是在編譯期蹦噠。declval常和c++11新引入的decltype配合。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江安县| 临邑县| 淄博市| 体育| 上蔡县| 巨野县| 延寿县| 托克逊县| 泰和县| 略阳县| 新乡县| 凤翔县| 耿马| 任丘市| 玛纳斯县| 曲麻莱县| 寿宁县| 新民市| 沁源县| 泰安市| 巴彦淖尔市| 广灵县| 横山县| 通化市| 咸丰县| 平顺县| 滕州市| 濮阳县| 安化县| 温泉县| 驻马店市| 泌阳县| 临汾市| 于都县| 旌德县| 临西县| 古丈县| 陆良县| 海林市| 西充县| 读书|