第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用前向的優(yōu)點

使用前向的優(yōu)點

C++ C
幕布斯7119047 2019-06-04 16:32:22
使用前向的優(yōu)點在完美的轉(zhuǎn)發(fā)中,std::forward用于轉(zhuǎn)換命名的rvalue引用。t1和t2到未命名的rvalue引用。這樣做的目的是什么?這將如何影響被調(diào)用的函數(shù)?inner如果我們離開t1 & t2作為落伍?template <typename T1, typename T2>void outer(T1&& t1, T2&& t2) {     inner(std::forward<T1>(t1), std::forward<T2>(t2));}
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

在完美轉(zhuǎn)發(fā)中,std:Forward用于將命名的rvalue引用T1和T2轉(zhuǎn)換為未命名的rvalue引用。這樣做的目的是什么?如果我們把t1和t2作為lvalue,這會對調(diào)用的函數(shù)內(nèi)部產(chǎn)生什么影響?

template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) {
    inner(std::forward<T1>(t1), std::forward<T2>(t2));}

如果在表達式中使用命名的rvalue引用,則它實際上是lvalue(因為您按名稱引用對象)??紤]以下示例:

void inner(int &,  int &);  // #1void inner(int &&, int &&); // #2

現(xiàn)在,如果我們打電話outer像這樣

outer(17,29);

我們希望將17和29轉(zhuǎn)發(fā)到#2,因為17和29是整數(shù)值,因此rvalue。但既然t1t2在表達中inner(t1,t2);如果是lvalue,您將調(diào)用#1而不是#2。這就是我們需要將引用轉(zhuǎn)換回未命名引用的原因。std::forward..所以,t1在……里面outer總是一個lvalue表達式,而forward<T1>(t1)可能是一個rvalue表達式,取決于T1..后者只是一個lvalue表達式,如果T1是一個無值引用。和T1僅在外部的第一個參數(shù)是lvalue表達式的情況下才推斷為lvalue引用。


查看完整回答
反對 回復 2019-06-04
  • 3 回答
  • 0 關注
  • 517 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號