91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

上犹县| 新晃| 通州市| 元江| 阜康市| 玛多县| 招远市| 农安县| 深水埗区| 精河县| 昭平县| 苏尼特左旗| 蛟河市| 苍梧县| 搜索| 无锡市| 全州县| 永修县| 石渠县| 宁晋县| 平阴县| 黄大仙区| 安国市| 乌兰浩特市| 福建省| 安康市| 崇左市| 布拖县| 金门县| 大荔县| 海丰县| 靖江市| 河西区| 长武县| 本溪市| 格尔木市| 全州县| 林甸县| 永昌县| 同心县| 桃江县|