追蹤返回型別

2021-09-25 03:18:01 字數 472 閱讀 3903

先看乙個例子:

templatedecltype(t1 + t2) sum(t1 &t1, t2 &t2)

這樣的寫法雖然看似不錯,不過編譯器在推導decltype(t1 + t2)時,表示式中的t1和t2都未宣告(編譯器只會從左向右讀入符號),按照c/c++編譯器規則,變數使用前必須已經宣告,為了解決這個問題,c++11引入了新語法——追蹤返回型別,來宣告和定義這樣的函式。

templateauto sum(t1 &t1, t2 &t2) -> decltype(t1 + t2)

我們把函式的返回值移至引數宣告之後,復合符號->decltype(t1 + t2)被稱為追蹤返回型別。而原本函式返回值的位置由auto關鍵字佔據,這樣,我們就可以讓編譯器來推導sum函式模板的返回型別了。而auto佔位符合->return_type也就是構成追蹤返回型別函式的兩個基本元素。

C 11新特性之追蹤返回型別函式

追蹤返回型別函式是指把函式的返回型別後置,這在模板型別推導過程中非常有用處,比如下面的 templatedecltype t1 t2 sum t1 t1,t2 t2 在上面這個函式定義中,decltype無法推導出t1 t2的型別,因為編譯器是從左向右處理的,當處理到decltype的時候,編譯器還...

《深入理解C 11》筆記 追蹤返回型別

templatedecltype 2 a doublevalue t a 用decltype推導返回型別但是對於編譯器來說,是從左到右進行編譯的,decltype在進行推導時並不知道a的型別,所以這種寫法是編譯不過的。為了解決這個問題,於是引入了追蹤返回型別 template auto double...

返回型別 》引用

1.何謂 引用 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用,不是新定義了乙個變數,它只表示該引用名...