函式過載的一些注意事項

2021-10-17 18:55:11 字數 888 閱讀 2237

函式過載時函式中比較重要的語法點,由於函式的其他機制,如隱性型別轉換,預設引數等,使得函式過載容易使人迷惑,哪些情況下的語法是錯誤的。

函式過載是函式的引數型別個數不同導致的,函式過載是允許隱性型別轉換發生的。比如

void func()

{ cout<<"func()"《此時的輸出結果是func(int a)。編譯器會優先找浮點型別的函式,沒有的情況下會發生型別轉換。當過載的引數為float和double時,也會發生有趣的現象。

void func(float a)

{ cout<<"func(float a)"《此時的輸出結果為func(double a),也就是說c++編譯器將浮點常數預設為double型別。當我們把以上程式的3.0換成3.0f的時候,程式的輸出就變成了func(float a)。如果這種情況下我們再加上型別轉換會發生什麼呢?

void func(float a)

{ cout<<"func(float a)"《此時的編譯器會報錯:call to 『func』 is ambiguous

類似的錯誤有很多:

void func(int a,double b)

{ cout<<"func(int a,double b)"《以上的兩次程式呼叫均會報錯。類似的錯誤是無法窮舉完的。但是我們可以總結出來乙個規律,就是如果你不能分辨出來呼叫哪個函式,那麼編譯器也不能,因為畢竟編譯器也是人寫的嘛。

預設引數也是很容易引發錯誤的語法點。

void func(int a,int b=1)

{ cout<<"func(int a,int b=1)"《此時的編譯器也會報錯,類似情況有很多。但都是可以用上面的話來總結。

程式設計師不能分辨的該用哪個函式的時候,編譯器也不能分辨

一些注意事項

0.解題思路 a.普通思路 b.遞迴 bfs dfs c.動態規劃 比遞迴快 d.雙指標 比for迴圈快 如 快慢指標方法 e.用棧 1.陣列初始化 int a new int 5 a 0 預設為0.二維陣列也一樣。boolean b new boolean 5 b 0 預設為false.strin...

php XPATH一些注意事項

40集 建立乙個dom物件並讀取xml檔案到記憶體中 dom new domdocument 1.0 utf 8 dom load book.xml 建立乙個xpath物件 xpath new domxpath dom sql bookstore book 1 title 注意此處路徑數字從1開始,...

vue一些注意事項

1.生命週期鉤子的this上下文指向呼叫它的 vue 例項。不要在選項屬性或 上使用箭頭函式,比如 created console.log this.a 或 vm.watch a newvalue this.mymethod 因為箭頭函式是和父級上下文繫結在一起的,this 不會是如你所預期的 vu...