[問題] 請問不定參數函式怎寫override?

看板C_and_CPP (C/C++)作者 (動き出す時間...)時間5年前 (2020/07/16 22:57), 5年前編輯推噓0(006)
留言6則, 2人參與, 5年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Visual studio 2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 請問不定參數函式 怎寫override? 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) http://codepad.org/68O4dTXM 補充說明(Supplement): 上方連結的程式碼是個示意example 假設CBaseLogger已經是一個做好的logger 基本功能(開檔寫檔)都在CBaseLogger::Log()裡面了 CDerivateLogger僅僅是加入一個flag 用來開啟or關閉寫log的功能 請問此處我該如何撰寫關於CDerivateLogger::Log()這個函式的override才正確呢? 先在此感謝各位板友。 補充: 我發現這問題時看到奇怪的現象 1. 一開始我沒發現CDerivateLogger::Log()這樣寫是有問題的 Log檔裡面寫出來的是對的 2. 後來我為了要debug, 因此把VC的optimize關閉, 然後發現突然程式會crash 有時候沒有crash, 但Log裡面寫出來一堆亂碼 3. 我仔細看code後才發現這邊可能有問題, 但即使如此, 為何在release build的情況下 Log竟然能寫出正確的值? 是否va_start/va_list/va_end這幾個function在release build能夠找到正確的參數? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.153.2 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1594911449.A.CB7.html ※ 編輯: Keitaro (1.163.153.2 臺灣), 07/16/2020 23:04:08

07/16 23:06, 5年前 , 1F
看起來比較像是要問怎麼傳 varargs
07/16 23:06, 1F

07/16 23:06, 5年前 , 2F
07/16 23:06, 2F

07/16 23:38, 5年前 , 3F
我猜release build直接去call CBaseLogger::Log
07/16 23:38, 3F

07/16 23:53, 5年前 , 4F
Release build 的時候可能是被優化成 tail call 了。由
07/16 23:53, 4F

07/16 23:53, 5年前 , 5F
於 varargs 是放在 stack 上傳的,所以 CBaseLogger::L
07/16 23:53, 5F

07/16 23:53, 5年前 , 6F
og 可以拿到傳入的參數。
07/16 23:53, 6F
原來如此 感謝以上兩位板友 ※ 編輯: Keitaro (1.163.153.2 臺灣), 07/17/2020 00:03:05
文章代碼(AID): #1V46hPot (C_and_CPP)
文章代碼(AID): #1V46hPot (C_and_CPP)