c++ - 为什么 printf 和 std::cout 的输出不同?
问题描述
我尝试了以下 C++ 代码。但是, 和 的输出printf
是std::cout
不同的。为什么?
struct Foo
{
int a;
int b;
int c;
};
int main()
{
printf("%d\n", &Foo::c); // The output is 8
std::cout << &Foo::c << "\n"; // The output is 1
}
解决方案
printf("%d\n", &Foo::c)
: 这是未定义的行为,因为&Foo::c
它不是整数,而是指向成员的指针(但实际上,编译器通常将指向数据成员的指针存储为偏移量,并且打印出 , 的偏移量)8
。Foo::c
8
std::cout << &Foo::c
:这会打印值&Foo::c
。由于 iostream 没有指向成员打印机的指针,它选择最接近的一个:将其转换为bool
,并将其打印为整数。&Foo::c
转换为is bool
,true
打印1
。