[問題] 用template取得array長度

看板C_and_CPP (C/C++)作者 (好滋好滋)時間4年前 (2021/06/26 22:38), 4年前編輯推噓3(304)
留言7則, 4人參與, 4年前最新討論串1/1
網上找到的做法是用reference搭配template來取得 https://ideone.com/hSXrOZ 我試著改用pointer做做看,但無法通過編譯 不如說為什麼reference就能通過編譯? 查到一篇類似的問題 https://tinyurl.com/3wvr2mze 難道reference裡面有存陣列的型別和長度, 而pointer只是單純放記憶體位置嗎? 還麻煩各位高手解惑,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.32.19 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1624718333.A.2F7.html

06/27 00:01, 4年前 , 1F
可以參考置底第12誡
06/27 00:01, 1F
我想問的是,ref多了pointer什麼東西才能這麼做 12誡沒有說明 ※ 編輯: ko27tye (36.229.32.19 臺灣), 06/27/2021 00:21:28

06/27 00:28, 4年前 , 2F
錯誤的版本要傳入陣列位址才行 這裡不能靠陣列退化
06/27 00:28, 2F

06/27 00:28, 4年前 , 3F
成指標 因為簽名不合
06/27 00:28, 3F
感謝!重點是signature不符合 fail_version(&arr) 這樣call就可以了 ※ 編輯: ko27tye (36.229.32.19 臺灣), 06/27/2021 00:43:24

06/27 03:16, 4年前 , 4F
順便提一下, reference 確實在某種意味上「有存」型別長度
06/27 03:16, 4F

06/27 03:17, 4年前 , 5F
但它不是存在程式執行的記憶體裡, 而是編譯器會記著它
06/27 03:17, 5F

06/27 03:17, 4年前 , 6F
這也是為什麼型別簽名會被編譯器檢查出不合的部份原因
06/27 03:17, 6F

06/27 07:02, 4年前 , 7F
學到了,感謝分享!
06/27 07:02, 7F
文章代碼(AID): #1WrplzBt (C_and_CPP)
文章代碼(AID): #1WrplzBt (C_and_CPP)