C++面試之你知道有哪些可執(zhí)行體嗎
某日二師兄參加XXX科技公司的C++工程師開發(fā)崗位第14面:
面試官:在C++中,有哪些可執(zhí)行體?
二師兄:可執(zhí)行體?
面試官:也就是可調(diào)用對(duì)象。
二師兄:讓我想一想。函數(shù)、函數(shù)指針、類的靜態(tài)方法、類的成員方法、仿函數(shù)、lambda表達(dá)式。
面試官:能說一說他們之間有什么區(qū)別嗎?
二師兄:好的。函數(shù)是一段代碼,執(zhí)行特定任務(wù),接受參數(shù)并返回值。
int add(int a, int b) { return a + b; }
二師兄:函數(shù)指針是指向函數(shù)的指針。
int add(int a, int b) { return a + b; } using addptr = int(*)(int,int); addptr ptr = &add; //函數(shù)指針 int sum = addptr(1,2);
二師兄:類的靜態(tài)方法和函數(shù)基本一致,只不過此靜態(tài)方法屬于整個(gè)類所有。而成員方法則只能通過類的實(shí)例來調(diào)用。
class Foo { public: static int add(int a, int b) { return a + b;} //靜態(tài)方法 int add2(int a, int b) { return a + b; } //成員方法 }; int sum1 = Foo::add(1,2); Foo f; int sum2 = f.add2(2,1);
二師兄:仿函數(shù)是一個(gè)類或結(jié)構(gòu)體,重載了()
運(yùn)算符。
struct Add { int operator()(int a, int b) { return a+ b;} }; int sum = Add()(1,2);
二師兄:lambda
表達(dá)式在C++11時(shí)被引入,本質(zhì)上是是一個(gè)匿名函數(shù)。
auto add = [](int a, int b) {return a + b;}; int sum = add(1,2); //or int a =1 , b = 2; auto ladd = [a,b](){return a + b;}; int sum = ladd();
面試官:你知道std::function
?
二師兄:哦,這個(gè)標(biāo)準(zhǔn)也是在C++11引入的,它的對(duì)象可以把以上所說的可執(zhí)行體保存起來。
std::function<int(int,int)> add_fun; add_fun = add; add_fun = ptr; add_fun = Foo::add; add_fun =std::bind(&Foo::add2,&f,std::placeholders::_1,std::placeholders::_2); add_fun = Add(); add_fun = ladd;
面試官:那你知道以上可執(zhí)行體之間的性能有何差別嗎?
二師兄:額,性能應(yīng)該差不多吧。。
面試官:好的,回去等通知吧。
今日二師兄的表現(xiàn)不錯(cuò),讓我們看一下面試官的最后一個(gè)問題:
知道以上可執(zhí)行體之間的性能有何差別嗎?
從性能上講,函數(shù)、類的靜態(tài)/成員方法(非虛方法)、仿函數(shù)和lambda
表達(dá)式的性能基本相同,而函數(shù)指針和std::function
的性能要差一些。因?yàn)楹瘮?shù)指針和std::function
的實(shí)例沒有辦法被內(nèi)聯(lián)。
好了,今日份面試到這里就結(jié)束了。 讓我們一起期待明天二師兄的表現(xiàn)吧。
到此這篇關(guān)于C++面試之你知道有哪些可執(zhí)行體嗎的文章就介紹到這了,更多相關(guān)C++可執(zhí)行體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解
這篇文章主要介紹了C++程序的執(zhí)行順序結(jié)構(gòu)以及關(guān)系和邏輯運(yùn)算符講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C++11 寫一個(gè)只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)
這篇文章主要為大家介紹了C++11 寫一個(gè)只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09