C++標(biāo)準(zhǔn)庫 _Get_unwrapped_n

編譯器: MSVC v142
所屬文件: xutility
位置(行): 377
函數(shù)名稱: _Get_unwrapped_n
函數(shù)描述:
嘗試提取迭代器的_Ptr, 如果迭代器沒有_ptr則原封不動的返回這個迭代器

源碼:

template <class _Iter, class _Diff,
    enable_if_t<
        !_Unwrappable_for_unverified_v<_Iter> //
            && ((!_Unwrappable_for_offset_v<_Iter> && is_integral_v<_Diff>) || is_same_v<_Diff, _Distance_unknown>),
        int> = 0>
_NODISCARD constexpr const _Iter& _Get_unwrapped_n(const _Iter& _It, _Diff) {
    // pass through lvalue iterator that doesn't participate in checking
    return _It;
}

?

拆分理解

  • _Unwrappable_for_unverified_v

    template <class _Iter>
    _INLINE_VAR constexpr bool _Unwrappable_for_unverified_v = _Unwrappable_v<_Iter>&& _Do_unwrap_when_unverified_v<_Iter>;
    

    _Unwrappable_v 驗證模板參數(shù)是不是一個Iterator.
    _Do_unwrap_when_unverified_v 判斷是否可以執(zhí)行_Unwrapped函數(shù).

    vector<int> a {1, 2, 3, 4, 5};
    vector<int> b {};
    auto start_iter = a.begin();        // 生成一個 iterator: _Vector_iterator
    auto back_iter = back_inserter(b);  // 生成一個 iterator: back_insert_iterator
    
    // Debug 模式
    cout << _ITERATOR_DEBUG_LEVEL << endl;  // 2
    cout << _Unwrappable_for_unverified_v<decltype(start_iter)> << endl; // false
    cout << _Unwrappable_for_unverified_v<decltype(back_iter)> << endl;  // false
    
    // Release 模式
    cout << _ITERATOR_DEBUG_LEVEL << endl;  // 0
    cout << _Unwrappable_for_unverified_v<decltype(start_iter)> << endl; // true
    cout << _Unwrappable_for_unverified_v<decltype(back_iter)> << endl;  // false
    

    這個測試代碼說明,當(dāng)編譯模式是Debug時, beginback_inserter生成的iterator都是不允許在未驗證_Verify_range的情況下調(diào)用iterator_Unwrapped函數(shù). 當(dāng)編譯模式是Release時, begin生成的iterator允許在未驗證_Verify_range的情況下調(diào)用iterator_Unwrapped函數(shù), 而back_inserter則不可以.
    備注: 這里說的不允許, 并不是真的不能調(diào)用, 而是做模板判斷的時候, 它會過濾掉當(dāng)前篩選.

  • _Unwrappable_for_offset_v

    template <class _Iter>
    _INLINE_VAR constexpr bool _Unwrappable_for_offset_v = _Unwrappable_v<_Iter>&& _Offset_verifiable_v<_Iter>;
    

    _Unwrappable_v 驗證模板參數(shù)是不是一個Iterator.
    _Offset_verifiable_v 判斷是否可以執(zhí)行 _Verify_offset 函數(shù).

  • is_integral_v

    // determine whether cv-unqualified type _Ty is integral
    template <class _Ty>
    _INLINE_VAR constexpr bool _Is_integral = _Is_any_of_v<_Ty, bool, char, signed char, unsigned char, wchar_t, 
                                                           char16_t, char32_t, short, unsigned short, int, unsigned int, 
                                                           long, unsigned long, long long, unsigned long long>;
    
    template <class _Ty>
    _INLINE_VAR constexpr bool is_integral_v = _Is_integral<remove_cv_t<_Ty>>;
    

    判斷一個type是不是一個數(shù)字類型.

  • is_same_v

    template <class, class>
    _INLINE_VAR constexpr bool is_same_v = false; // determine whether arguments are the same type
    
    template <class _Ty>
    _INLINE_VAR constexpr bool is_same_v<_Ty, _Ty> = true;
    

    如果第一個類型參數(shù)和第二個類型參數(shù)相同, 則會匹配到template <class _Ty> _INLINE_VAR constexpr bool is_same_v<_Ty, _Ty> = true; 這個特化版本, 表示true.
    如果第一個類型參數(shù)和第二個類型參數(shù)不同, 則會跳過第一個匹配, 命中template <class, class> _INLINE_VAR constexpr bool is_same_v = false; 這個標(biāo)準(zhǔn)模板, 表示false.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稿湿,隨后出現(xiàn)的幾起案子贬堵,更是在濱河造成了極大的恐慌吏夯,老刑警劉巖震檩,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異善镰,居然都是意外死亡是目,警方通過查閱死者的電腦和手機(jī)谤饭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揉抵,你說我怎么就攤上這事亡容。” “怎么了冤今?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵闺兢,是天一觀的道長。 經(jīng)常有香客問我戏罢,道長屋谭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任龟糕,我火速辦了婚禮桐磁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讲岁。我一直安慰自己我擂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布缓艳。 她就那樣靜靜地躺著扶踊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郎任。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天备籽,我揣著相機(jī)與錄音舶治,去河邊找鬼。 笑死车猬,一個胖子當(dāng)著我的面吹牛霉猛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播珠闰,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惜浅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伏嗜?” 一聲冷哼從身側(cè)響起坛悉,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎承绸,沒想到半個月后裸影,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡军熏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年轩猩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡均践,死狀恐怖晤锹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彤委,我是刑警寧澤鞭铆,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站葫慎,受9級特大地震影響衔彻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偷办,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一艰额、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椒涯,春花似錦柄沮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至湖苞,卻和暖如春拯欧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背财骨。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工镐作, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人隆箩。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓该贾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捌臊。 傳聞我的和親對象是個殘疾皇子杨蛋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容