gpt4 book ai didi

c++ - 具有整数成员的对象的 Printf

转载 作者:搜寻专家 更新时间:2023-10-31 01:25:22 26 4
gpt4 key购买 nike

我有这些奇怪的行为。如果我使用下面的代码

class Simple
{
public:
Simple()
{
m = 1;
mm = 2;
mmm = 3;
}

~Simple()
{
}

private:
int mmm;
int mm;
int m;
};

int main(int argc, char** argv)
{
Simple sim;

printf("%d\n", sim);
}

作为 printf 的结果,我得到了数字“3”。如果我首先放入声明,例如,变量“mm”而不是“mmm”,则 printf 的结果是数字“2”。如果我在声明中首先放入变量“m”,则 printf 给我“1”,则行为相同。似乎 printf 可以打印声明的第一个 int 变量。怎么可能?

最佳答案

printf 是一个可变参数函数,这意味着它不知道如何检查第二个和后面的参数的类型。因此,在典型的实现中,它相信您正在为其提供由 %d 指示的正确类型的参数,即 int。您的 sim 对象在内存中是三个 int 组合在一起的。 printf,给定 %d,尝试读取 int 并获取您在 中声明的第一个 int 变量code>sim.

请注意,这是未定义的行为,您不应依赖它。

关于c++ - 具有整数成员的对象的 Printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56957842/

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