欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

本文主要給大家介紹了關(guān)于C++11中std::declval實(shí)現(xiàn)機(jī)制的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來一起看看詳細(xì)的介紹:

在vs2013中,declval定義如下

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

其中,add_rvalue_reference為一個(gè)traits,定義為

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

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

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

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

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

((Klass*)0)->m_a;

這也是在c語言中獲取結(jié)構(gòu)體成員的地址偏移量的常用技巧,但是有魔鬼數(shù)字和類型強(qiáng)轉(zhuǎn),不如declval來得優(yōu)雅。

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對(duì)我們的支持。

上一篇:C/C++語言宏定義使用實(shí)例詳解

欄    目:C語言

下一篇:C語言數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表的簡單實(shí)例

本文標(biāo)題:C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1406.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有