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

溫馨提示×

溫馨提示×

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

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

C++11中如何使用forward函數

發布時間:2021-07-28 13:50:58 來源:億速云 閱讀:555 作者:Leah 欄目:大數據

本篇文章給大家分享的是有關C++11中如何使用forward函數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

傳值函數模板

假設有一組函數,根據兩個輸入值進行工作,例如下面的add函數:

C++11中如何使用forward函數

我們希望編寫一個函數模板來調用這些函數。

C++11中如何使用forward函數

這個函數模板的使用方法如下:

C++11中如何使用forward函數

程序員可以根據需要,修改函數名參數和兩個變量的類型。到目前為止算是準備活動。

左值引用參數函數模板

除了像add函數那樣,兩個參數都作為輸入的函數以外,也許還希望調用這樣的函數:

C++11中如何使用forward函數

在這些函數中,希望將通過引用類型將運算結果輸出。這種情況下可以按一下方式定義函數模板:

C++11中如何使用forward函數

函數模板2的使用方法如下:

C++11中如何使用forward函數

這個函數模板可以使用add和inc兩種形式的函數。但是還有一個小問題:沒有辦法像第一種情況那樣使用常數作為參數,因為常數是一個右值。

右值引用參數函數模板

為了解決左值引用參數模板的問題,可以定義右值引用參數函數模板。

C++11中如何使用forward函數

有了這個模板之后,下面的代碼都可以正常編譯執行。

C++11中如何使用forward函數

在輸入參數的地方,指定常數也沒有問題。已經很不錯了。

前進中的問題

如果我們想這個模板函數調用下面的函數呢?

C++11中如何使用forward函數

下面的代碼是沒有辦法通過編譯的。

C++11中如何使用forward函數

編譯錯誤為在調用swap_rvalue時int無法轉換為int&&類型。

發生了什么

為了弄清楚函數模板內部的情況,作者編寫了下面的函數:

C++11中如何使用forward函數

這的函數的功能是為了是取得本文中提到的類型T的實際類型。雖然并不完整,但是可以用來說明本文中遇到的問題。這個函數可以這樣使用:

C++11中如何使用forward函數

輸出結果如下:

C++11中如何使用forward函數

它正確的輸出了,int,int&和int&&的類型。我們可以吧showType嵌入到函數模板中:

C++11中如何使用forward函數

為了回避編譯錯誤,暫且屏蔽調用函數的部分。模板函數的輸出結果為:

C++11中如何使用forward函數

由于發生了上一篇文章中說明的引用合并,T1,T2的類型分別變成了右值。這就是調用swap_int失敗的原因。

C++11的解決方式

為了解決模板函數中參數類型變化的問題,C++11中可以使用std::forward來恢復模板參數的左值或右值屬性。修改后的代碼如下:

C++11中如何使用forward函數

在調用f之前,另外增加了兩行代碼以表示std::foward的執行結果。程序輸出如下:

C++11中如何使用forward函數

可以看到,調用時的類型被成功恢復,swap_int函數也被正確的執行了。不僅如此,下面的代碼都能正確執行。

C++11中如何使用forward函數

以上就是C++11中如何使用forward函數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定结县| 织金县| 阳春市| 新建县| 闽侯县| 菏泽市| 含山县| 容城县| 张家界市| 长春市| 敦煌市| 惠水县| 苏州市| 同心县| 沂水县| 雷波县| 曲沃县| 神农架林区| 凤山市| 潜山县| 娄烦县| 额济纳旗| 临清市| 凤阳县| 固镇县| 繁昌县| 饶河县| 长兴县| 门头沟区| 东兰县| 延津县| 石狮市| 博湖县| 道孚县| 肥东县| 同德县| 澄迈县| 祁连县| 寿光市| 固原市| 泰兴市|