gpt4 book ai didi

c++ - 有没有办法禁止在 c 样式变量参数列表中按值使用类?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:38 26 4
gpt4 key购买 nike

在 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; }

那里的 printf 调用按值接收两个 s 对象。这意味着他们的所有成员都只是内存复制。但它们被解释为一个简单的字符指针。结果当然是运行时错误。

我不是在寻求解决方案,但我希望可以添加一些东西到我的类中,以便编译器警告我或给出错误。

已尝试声明但未实现复制构造函数。但是好像没有调用拷贝构造函数。 :-(

请直接回答标题中的问题。我不需要讨论为什么你不应该使用 printf 或这些变量参数列表 - 知道这一点。

感谢您的宝贵时间。

最佳答案

体面的编译器(如 gcc)检查 printf 参数是否匹配格式字符串中的格式说明符。

只是不要忘记添加 -Wformat-Wall 命令行选项。

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

关于c++ - 有没有办法禁止在 c 样式变量参数列表中按值使用类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com