[問題] 兩題C++面試題的詢問

看板C_and_CPP作者 (宇宙學型男)時間7年前 (2018/04/03 11:52), 編輯推噓10(10014)
留言24則, 11人參與, 6年前最新討論串1/4 (看更多)
先說是面試題 所以會有一些奇怪的寫法 晚輩還是剛入行的新人 若有冒犯 請見諒 1. class A { public: virtual void foo(int a = 0) { printf("A %d\n", a); } }; class B : public A { public: virtual void foo(int a = 1) { printf("B %d\n", a); } }; A *p = new B(); p->foo(); 我答結果是 B 1 面試官說你回去試試看 結果回家測試的結果是 B 0 我可以理解virtual function的用法 但是唯獨那個a我並不能理解為什麼是0... 2. struct test { int a; char b; short c; double d; char e; }; test這個大小是多少? 我可以理解關於記憶體對齊的問題 所以我答總共是24 bytes 面試官接著問為什麼是24 以及那他們在系統內的記憶體位置是如何? 我回答 int 4 char 4(對齊後) short 4(對齊後) double 8 char 4(對齊後) 所以總共是24 (我的概念可能有錯...) 他說24是對的 但是位置的概念不正確 叫我回去測試看看 我回家測試(以下都起始位置) a 9435088 b 9435092 c 9435094 d 9435096 e 9435104 我理解可能char short那邊可能答錯了 但是即便是這樣 e那個位置對齊以後末三碼應該是108 88到108應該也是20個bytes阿... 有前輩可以指點我哪裡概念有錯誤嗎? 或是能夠提供方向讓我找資料 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 136.60.160.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522727559.A.A71.html

04/03 12:00, 7年前 , 1F
因為virtual function default parameter是看你怎樣呼叫
04/03 12:00, 1F

04/03 12:01, 7年前 , 2F
04/03 12:01, 2F

04/03 12:03, 7年前 , 3F
第二個可以google intel data alignment and structure
04/03 12:03, 3F

04/03 12:03, 7年前 , 4F
第二點是我們不知道實際上會怎樣被放
04/03 12:03, 4F

04/03 12:11, 7年前 , 5F
對,但是不知道為甚麼,面試都很愛考這個
04/03 12:11, 5F

04/03 14:06, 7年前 , 6F
錄取了嗎?
04/03 14:06, 6F

04/03 15:34, 7年前 , 7F
第一題effective c++有
04/03 15:34, 7F

04/03 15:34, 7年前 , 8F
我記得是給初始值之後的virtual func
04/03 15:34, 8F

04/03 15:34, 7年前 , 9F
就會變成靜態綁定了
04/03 15:34, 9F

04/03 15:39, 7年前 , 10F
所以實作上用virtual func
04/03 15:39, 10F

04/03 15:39, 7年前 , 11F
根本不可以給parmeter的預設值
04/03 15:39, 11F

04/03 20:42, 7年前 , 12F
第二題還是看complier 看cpu怎麼fetch最快
04/03 20:42, 12F

04/03 21:12, 7年前 , 13F
搞不懂考這種特例的用意是什麼?
04/03 21:12, 13F

04/03 22:55, 7年前 , 14F
第一題 剛剛回去翻Effective C++ 在37條
04/03 22:55, 14F

04/04 10:37, 7年前 , 15F

04/04 10:37, 7年前 , 16F
ent
04/04 10:37, 16F

04/04 10:37, 7年前 , 17F
維基說整個大小會是最大的type的倍數
04/04 10:37, 17F

04/04 10:38, 7年前 , 18F
所以這個例子是double的8byte乘上3,變成24
04/04 10:38, 18F

04/04 13:15, 7年前 , 19F
alignment跟compiler有關 不同compiler有可能不同大小
04/04 13:15, 19F

04/04 13:45, 7年前 , 20F
原PO回答也沒錯阿 以4byte當alignment就是這種情形
04/04 13:45, 20F

04/04 13:50, 7年前 , 21F
alignment主要是考量到效率以及有些架構如果沒有對齊
04/04 13:50, 21F

04/04 13:50, 7年前 , 22F
會有fault 所以可能的情形會很多XD
04/04 13:50, 22F

04/04 22:13, 7年前 , 23F
考試喜歡考沒多大用處的特例,可以顯示出題人的優越感
04/04 22:13, 23F

07/08 15:42, 6年前 , 24F
推推
07/08 15:42, 24F
文章代碼(AID): #1Qmlg7fn (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Qmlg7fn (C_and_CPP)