变量参数函数如何将对象带入结构/类? 例如:
CString a_csName;
CString a_csAge(_T("20"));
a_csName.Format(_T("My Age is : %s"),a_csAge);
这里的 CString::Format
是一个 printf 风格的变量参数函数,它接受这个 CString
对象。这怎么可能?
最佳答案
通过 MFC 代码进行一些研究和调试后发现以下内容,希望它能帮助遇到著名的静态代码分析器错误“将结构‘CStringT’传递给省略号”的人,这实际上也是我怀疑的根源。
http://www.gimpel.com/html/bugs/bug437.htm
格式函数是可变参数函数,取决于第一个参数中存在的格式说明符。第一个参数始终是一个 char *。
它解析格式说明符 (%s,%d,%i...) 并根据找到的格式说明符的索引读取 var_arg 数组,并直接转换为 char * if %s 或 int if %d被指定。
因此,如果指定了 CString 并且相应的格式说明符是 %s,那么将在 CString 对象上直接尝试转换为 char *。
CString a_csName;
CString a_csAge(_T("20"));
a_csName.Format(_T("My Age is : %s"),a_csAge);
wcout<<a_csName;
将打印我的年龄是 20
CString a_csName;
CString a_csAge(_T("20"));
a_csName.Format(_T("My Age is : %d"),a_csAge);
wcout<<a_csName;
将打印我的年龄是 052134
所以这背后没有智能。只是直接 Actor 。因此,我们传递 POD 或用户定义的数据结构并没有什么区别。
关于c++ - 将对象传递给 var arg 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709252/