作者Keitaro (动き出す时间...)
看板C_and_CPP
标题[问题] 请问不定参数函式怎写override?
时间Thu Jul 16 22:57:26 2020
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1594911449.A.CB7.html
※ 编辑: Keitaro (1.163.153.2 台湾), 07/16/2020 23:04:08
1F:→ Lipraxde: 看起来比较像是要问怎麽传 varargs 07/16 23:06
3F:→ nh60211as: 我猜release build直接去call CBaseLogger::Log 07/16 23:38
4F:→ Lipraxde: Release build 的时候可能是被优化成 tail call 了。由 07/16 23:53
5F:→ Lipraxde: 於 varargs 是放在 stack 上传的,所以 CBaseLogger::L 07/16 23:53
6F:→ Lipraxde: og 可以拿到传入的参数。 07/16 23:53
原来如此 感谢以上两位板友
※ 编辑: Keitaro (1.163.153.2 台湾), 07/17/2020 00:03:05