某日二師兄參加XXX科技公司的C++工程師開發崗位第8面:
面試官:C++中,函式的引數應該傳值還是傳參考?
二師兄:要看引數的用途,如果是出參,必須傳參考,如果是入參,主要考慮引數型別的大小,來決定傳值還是傳參考,
面試官:為什么不使用指標?
二師兄:傳指標也稱之為傳參考(
pass by refereence),但是在C++中不推薦使用指標,因為指標需要判斷是否位空,而參考則無需擔心,面試官:入參傳值還是傳參考有什么標準嗎?
二師兄:沒有標準吧,一般引數型別大小大于16位元組(64位作業系統)時,傳參考效果要好于傳值,
面試官:為什么?
二師兄:因為傳值相當于拷貝構造,當變數的型別尺寸大于16位元組時,拷貝構造所消耗的時間大于解參考,此時傳參考收益更高,
面試官:你知道函式引數傳遞的程序中,暫存器起什么作用嗎?
二師兄:額,,了解過一些,一般簡單的資料型別,可以通過暫存器傳遞,而對于結構圖和類則使用是通過堆疊傳遞引數,當然不同的編譯器對此實作不盡相同,
面試官:那么你知道什么是
cdel、stdcall、fastcall、thiscall嗎?二師兄:聽說過,不是很了解,,
面試官:好的,回去等通知吧,
今日二師兄的表現比較穩定,只有最后一問沒有回答上來:
你知道什么是
cdel、stdcall、fastcall、thiscall嗎?
這些都是C++中的函式呼叫約定,它們決定了函式引數的傳遞方式和堆疊的清理方式,
cdecl是默認的呼叫約定,它將引數按照從右到左的順序依次壓入堆疊中,由呼叫者負責清理堆疊,stdcall將引數按照從右到左的順序依次壓入堆疊中,由被呼叫函式負責清理堆疊,fastcall將前兩個整型或指標引數存盤在暫存器中,其余引數按照cdecl約定壓入堆疊中,thiscall是用于成員函式的呼叫約定,它將this指標作為隱式引數傳遞,并將其存盤在暫存器或堆疊中,其余引數按照cdecl約定壓入堆疊中,
需要注意的是,這些約定可能因編譯器和平臺的不同而不同,
好了,今日份面試到這里就結束了,小伙伴們,對于今天二師兄的面試,能打幾分呢?
關注我,帶你21天“精通”C++!(狗頭)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554547.html
標籤:其他
下一篇:返回列表
