原題為 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。根據回覆說此型別的問題在《effective c++》的item 37有所討論——「對於虛函式不要用預設的引數——靜態」。由於a是乙個指向b例項的引用,因此在執行的時候會呼叫b::fun。
但預設引數是在編譯期決定的。
在編譯的時候,編譯器只知道a是乙個型別a的引用,具體指向什麼型別在編譯期是不能確定的,
因此會按照a::fun的宣告把預設引數number設為10。
這一題的關鍵在於理解確定預設引數的值是在編譯的時候,但確定引用、指標的虛函式呼叫哪個型別的函式是在執行的時候。
可以驗證,當**為
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)
寫程式,寫 是在面試中必不可少的環節,你要拿題,上機寫出 好了,你可能不知道其中有多少的 貓膩 是吧,夥計。別人我讀不告訴他。一 你要讀懂題,懂得題意,要讓你實現什麼功能,看看題目的要求。二 如果是演算法題,在腦海中想演算法的思想,在紙上寫出偽 一般公司的面試演算法題,無非就是那幾道,沒有更深的,當...