C 面試每日一題之16

2022-03-04 06:08:13 字數 1218 閱讀 9229

原題為 c++#面試每日一題#(16):執行下圖中**,輸出的結果是什麼?

**如下

#include 

<

iostream

>

using

namespace

std;

struct

a };

struct

b:publica};

intmain()

輸出結果為

std : from b 10

這題在微博上已經有解釋,我看到此題的時候沒有怎麼注意到 print方法後面的預設引數,只是感覺到很納悶,看答案才發現玄機。

摘錄答案如下

view code

答案:輸出b::fun with number 10。

由於a是乙個指向b例項的引用,因此在執行的時候會呼叫b::fun。

但預設引數是在編譯期決定的。

在編譯的時候,編譯器只知道a是乙個型別a的引用,具體指向什麼型別在編譯期是不能確定的,

因此會按照a::fun的宣告把預設引數number設為10。

這一題的關鍵在於理解確定預設引數的值是在編譯的時候,但確定引用、指標的虛函式呼叫哪個型別的函式是在執行的時候。

根據回覆說此型別的問題在《effective c++》的item 37有所討論——「對於虛函式不要用預設的引數——靜態」。

可以驗證,當**為

int

main()

結果輸出依然為

std : from b 10

指標與引用在此處的差別不大。

ps: 記得當年有人面試問指標與引用的差別。我覺得最大的差別在於指標有空間,而引用只是乙個別名,不占用空間。

下面的敘述也有待更新。

此外google到的結果是《指標和引用的區別總結 》

原文如下

1

.從現象上看:指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變

2.從記憶體分配上看:程式為指標變數分配記憶體區域,而引用不分配記憶體區域

3.從編譯上看:程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用在符號表上對應的位址值為引用物件的位址值。符號表生成後就不會再改,因此指標可以改變指向的物件(指標變數中的值可以改),而引用物件不能改。

CISP CISA 每日一題 16

cisa 每日一題 答 作業排程軟體的優點 1 作業資訊僅需建立一次,減少錯誤發生概率 2 可定義作業間的依賴關係,當某一項作業失敗時,依賴於該作業的後續作業就不會被執行 3 所有成功或失敗的作業均被記錄 4 對操作員的依賴程度降低 5 能對生產資料的訪問提供安全 應該記錄的日誌錯誤有 1 程式錯誤...

面試 每日一題(8)

好長時間沒有更新部落格了,特別是這個專欄,一是因為自己比較忙,二是因為我還是比較懶的緣故。讓各位見笑了。今天在更新一篇。像什麼strcpy strcat等等字串的操作和實現在面試中經常出現,不管是上機題還是筆試題。而今天在這裡我將重點講講strcpy和memcpy的實現,而memset也會稍微提一下...

面試 每日一題(7)

寫程式,寫 是在面試中必不可少的環節,你要拿題,上機寫出 好了,你可能不知道其中有多少的 貓膩 是吧,夥計。別人我讀不告訴他。一 你要讀懂題,懂得題意,要讓你實現什麼功能,看看題目的要求。二 如果是演算法題,在腦海中想演算法的思想,在紙上寫出偽 一般公司的面試演算法題,無非就是那幾道,沒有更深的,當...