首页 > 解决方案 > 为什么 printf 和 std::cout 的输出不同?

问题描述

我尝试了以下 C++ 代码。但是, 和 的输出printfstd::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
}

标签: c++

解决方案


printf("%d\n", &Foo::c): 这是未定义的行为,因为&Foo::c它不是整数,而是指向成员的指针(但实际上,编译器通常将指向数据成员的指针存储为偏移量,并且打印出 , 的偏移量)8Foo::c8

std::cout << &Foo::c:这会打印值&Foo::c。由于 iostream 没有指向成员打印机的指针,它选择最接近的一个:将其转换为bool,并将其打印为整数。&Foo::c转换为is booltrue打印1


推荐阅读