c 模板函式呼叫優先順序問題

2021-10-08 01:36:22 字數 1978 閱讀 2875

#include

using

namespace std;

template

<

typename w>

// template 是定義模板 模板型別可以自定義 t就是別名

w max

(w a, w b)

template

<

>

// <>沒東西就是模板專門化

int*

max(

int*a,

int*b)

int*

max(

int*a,

int*b)

template

<

typename t>

t*max

(t *a, t *b)

template

<

typename t>

t max

(t arr,

int n)

;for

(int i =

0; i < n; i++

)return ret;

}template

<

typename t,

int lower=0,

int upper=

4>

// 別名引數 別名引數也可以帶預設值傳參方式<> t也可以預設型別=int

t max

(t arr)

;for

(auto i = lower; i < upper; i++

) ret +

= arr[i]

;return ret;

}template

<

typename t,

typename t1>

// auto 返回型別函式+後面+ ->decltype(引數)是自己推斷返回型別

auto

max(t a, t1 b)

->

decltype

(a > b ? a : b)

return a > b ? a : b;

}// c++17中還允許 推斷別名引數 templatevoid f《10》{} 推斷別名引數

intmain()

, y;

// 如果編譯器已經生成了一種型別下次就不會再生成了是直接呼叫之前例項化的模板函式

double a

, b;

cout << max<

int>

(x, y)

<< endl;

//編譯器會自動匹配模板函式對應的型別 也可以在呼叫模板函式後面(x,y) 丟型別給模板

cout <<

*max

(&x,

&y)<< endl;

// 如果不丟編譯器會自動匹配函式在匹配模板函式,因為普通函式優先順序高於模板函式

cout <<

max(a, b)

<< endl;

// 又生成乙個double型別的模板函式

cout <<

*max

(&a,

&b)<< endl;

// 又生成乙個double*型別的模板函式 這個取位址那邊釋放就是一堆位址的比較

double ds;

cout <<

max(ds,4)

<< endl;

cout <<

max(ds)

<< endl;

// 裡面就是呼叫的別名引數 函式引數(ds) 也可以讓編譯器自己推斷

cout << max<

int,

int>

(x, y)

<< endl;

// 有兩個別名 如果不加呼叫的還是自動匹配的模板函式因為推斷優先順序沒不推斷高

while

(true);

return0;

}

C語言弄搞優先順序 優先順序問題

c語言易弄錯優先順序 1.的優先順序高於 操作符用於消除這類問題 p.f誤認 p所指物件的字段f。p f 實際結果 對p取f偏移,作為指標,然後作為解除引用操作。p.f 2.優先順序高於 int ap誤認 ap是個指向int陣列的指標。int ap 實際結果 ap是個元素為int的指標陣列。int ...

c 實現優先順序佇列 模板

首先我們來看佇列 佇列是一種先進先出的資料結構,它是按照元素的入隊時間順序來出隊的 而優先順序佇列是按照優先順序來進行處理,即不是將隊頭元素出隊,而是先將佇列中優先順序最高的元素出隊,我們一般借助堆來選出優先順序高的元素 堆是一種特殊的佇列,從堆中取出元素不是按照入隊順序,而是按照元素優先順序大小。...

優先順序問題

若有 int i 10,j 2 則執行完 i j 8 後 i 的值為28。請問這句話的說法是正確的嗎?正確 均為賦值運算子,賦值運算子的優先順序只比逗號運算子高,所以會先 之後再 一共有十五個優先順序 1 2 負號 取變數位址 type 強制型別 sizeof 3 4 5 6 7 8 9 10 11...