那些奇奇怪怪的寫法

2021-10-05 01:28:32 字數 1422 閱讀 8563

template

<

class

t>

class

test

}template

<

class

t>

void

func

(t a,

int len)

關鍵字template意味著我們要定義乙個模板,那定義模板肯定要有泛指型別,那麼泛指型別在**呢,t就是我們要的泛指型別,那為什麼t前面是關鍵字class而不是關鍵字typename呢?其實這裡的t確實是乙個泛指型別,這是c++發展的歷史原因,早期的c++直接復用class關鍵字來定義模板,但是泛型程式設計針對的不只是類型別,所以使用class關鍵字的使得**出現二義性,比如以下**

class

test_1

;class

test_2};

template

<

class

t>

void

test_class()

所以後面就出現了typename代替class定義泛指型別的做法**,typename的作用有兩個,第乙個是定義泛指型別,第二個是明確告訴編譯器緊跟其後的識別符號是乙個型別,所以使用typename定義就不會產生歧義**

int

func

(int i)

trycatch(.

..)

這裡的try…catch這樣寫是用於分隔正常功能**與異常處理**,可以直接將函式實現分隔為2部分

int

func

(int i,

int j)

throw

(int

)

函式宣告和定義時可以直接指定可能丟擲的異常型別,其實這裡的throw(int)是就是乙個異常宣告,說明只能丟擲int型別的異常,可以提高**可讀性

例子:

#include

#include

#include

using

namespace std;

char

fun(

char c)

throw

(char

)else

}void

test

(char i)

trycatch

(char i)

intmain

(int argc,

char

*ar**)

結果:

sice@sice:~$ ./a.out 

exception: 0

fun(char c)l

奇奇怪怪書

main a,b 據說根據c99標準 main 隨便寫什麼都可以的樣子 gcc警告然後還是可以編譯int a b main 還是可以編譯就是 各種警告float a,b main 這個很好玩的樣子 退出for迴圈條件是 scanf f a 為假 不是很清楚,等下再研究scanf返回值 大概就是如果s...

奇奇怪怪的樹形dp

條件 1.整個圖是乙個樹狀的結構或者可以轉化為樹狀的結構。2.對於每個根節點的狀態,跟且僅跟所屬的孩子 大多為2個 有牽連關係。也就是說,父親對孩子沒有影響。3.狀態可以簡單的表示 4.有重疊子問題 可以沒有,不過那樣應用dp就沒有意義了 將樹轉換為二叉樹 樹中每個結點最多只有乙個最左邊的孩子 長子...

奇奇怪怪的知識 GMV

gmv gmv gross merchandise volume 在電商 定義裡面是 成交金額,這個實際指的是拍下訂單金額,包含付款和未付款的部分 gmv 1銷售額 2取消訂單金額 3拒收訂單金額 4退貨訂單金額 一般取消訂單與拒收訂單的分界點在訂單是否已經從庫房生產完畢,庫房還沒生產的訂單客戶取消...