亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

鲁山县| 万盛区| 定结县| 邹平县| 博罗县| 西藏| 介休市| 武夷山市| 高州市| 马山县| 米脂县| 左权县| 庆城县| 儋州市| 沭阳县| 斗六市| 陕西省| 南城县| 大兴区| 桃园县| 威海市| 林芝县| 临城县| 微山县| 随州市| 浪卡子县| 赞皇县| 永修县| 渝中区| 民县| 平顶山市| 廊坊市| 永春县| 铅山县| 嘉禾县| 新野县| 驻马店市| 邹城市| 曲沃县| 石家庄市| 临夏市|