在c样式无类型变量参数列表中使用类的常规用法是常见的错误源.例:
class MyString {
public:
char *pChars;
int Length;
MyString(char *pChars) {
this->pChars = pChars;
Length = strlen(pChars);
} };
int main() {
MyString s1("Bla1"), s2("Bla2");
printf("%s%s", s1, s2); // This does not but should give a compiler warning/error!
return 0; }
Run Code Online (Sandbox Code Playgroud)
printf调用按值接收两个s对象.这意味着他们的所有成员都只是简单的内存复制.但它们被解释为一个简单的char指针.结果当然是运行时错误.
我不是要求解决这个问题,但是我希望有一些东西可以添加到我的类中,以便编译器警告我或者给出错误.
已经尝试声明但没有实现复制构造函数.但似乎没有调用复制构造函数.:-(
请回答标题中的问题.我不需要讨论为什么你不应该使用printf或这些变量参数列表 - 知道这一点.
谢谢你的时间.
qrd*_*rdl 11
体面编译器(如gcc)检查printf参数是否与格式字符串中的格式说明符匹配.
只是不要忘记添加-Wformat或-Wall命令行选项.
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |