函式過載的一些問題

2021-10-10 00:03:54 字數 1088 閱讀 6719

面試問題:

void fun(int, double)

void fun(double, int)

現在呼叫fun(int , int)會怎麼樣?

函式過載的匹配過程有三步:

1、確定候選函式,兩個原則:1)函式名相同 2)在呼叫點函式可見。顯然對於該題目來說兩個函式都是候選函式。

2、確定可行函式,也是有兩個原則:1)引數個數匹配 2)形參型別和實參型別相同或者可以轉型。對這個題而言,乙個函式的形參為(int,double),實參為(int,int)可以轉換為形參型別,對於另外乙個函式,實參也可轉換為形參型別。兩個函式都是可行函式。

3、精確匹配,如果有多個候選函式,編譯器就需要進行精確匹配的工作,精確匹配。精確匹配就是要找出最佳的那個可行函式,有兩個原則:

1)該函式的每乙個引數匹配都不比別的函式差;

2)至少有乙個實參的匹配優於其他函式的匹配。

對於實參(int,int)而言,沒有最佳的匹配函式。因為兩個可行函式都不能做到比另乙個匹配的更精確,所以編譯器會出現二義性呼叫。

函式過載的其他注意問題:

1、const引數與過載

頂層const 不存在過載,只有底層const才會過載

補充:int i=0;

int* const p = & i;//p是乙個頂層const,即指標本身是乙個常量指標,指標本身不能變

const int num=2;

const int* p1 = & num;//p1是乙個底層const,指標p1指向乙個常量,但是指標p1本身並不是乙個常量

void fun(int);

void fun(const int);//重複的宣告,非過載

void fun(int*);

void fun(int* const);//形參為頂層const,非過載

void fun(string str);

void fun(const string &);//底層const引用,新函式,正確的過載

void fun(int* p);

void fun(const int *p);//形參為底層const指標,正確的過載,新函式

getline函式的一些問題

getline 的原型是 istream getline istream is string str char delim 其中 istream is 表示乙個輸入流,譬如cin string str表示把從輸入流讀入的字串存放在這個字串中 可以自己隨便命名,str什麼的都可以 char delim...

箭頭函式的一些問題

在普通函式中,this指向根據其使用場景不同改變。而箭頭函式中的this始終指向其父級作用域 var person p 此時的this並不是指向例項物件,而是指向父級作用域,指向window,所以不能作為建構函式 如果想要實現不定引數的呼叫,就使用.剩餘引數實現 var sayhi b consol...

wait函式的一些問題

1 include 23 若成功則返回程序id,若出錯則返回 1 4 pid t wait int statloc 56 pid t waitpid pid t pid,int statloc,int options 當乙個程序正常或異常終止時,核心就向其父程序傳送sigchld訊號。因為子程序終止...