国产探花免费观看_亚洲丰满少妇自慰呻吟_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配合。

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤凰县| 梁平县| 咸丰县| 蒙阴县| 那曲县| 同江市| 饶河县| 濮阳县| 华宁县| 密云县| 津市市| 高碑店市| 元朗区| 灵武市| 邳州市| 茂名市| 湾仔区| 郁南县| 翼城县| 五常市| 泽州县| 桦川县| 江永县| 屏边| 台江县| 尉氏县| 清新县| 平武县| 屏南县| 麻江县| 安阳市| 河池市| 扶余县| 永济市| 元阳县| 灌阳县| 密云县| 巴中市| 崇义县| 西峡县| 玉龙|