中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-12 14:49:57 來源:腳本之家 閱讀:213 作者:呃仙兒 欄目:編程語言

本文主要給大家介紹了關于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配合。

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民县| 陈巴尔虎旗| 葫芦岛市| 余干县| 红桥区| 尼玛县| 夹江县| 台安县| 长治市| 信丰县| 普安县| 松桃| 柳林县| 潜江市| 师宗县| 珲春市| 临桂县| 平江县| 西华县| 嘉祥县| 龙口市| 阿尔山市| 敦化市| 哈尔滨市| 双辽市| 连南| 织金县| 宜都市| 新田县| 光泽县| 镇宁| 安仁县| 保德县| 南宁市| 滦南县| 开远市| 正蓝旗| 松溪县| 安多县| 望奎县| 鄂伦春自治旗|