gpt4 book ai didi

c++ - C++中指向数据成员的指针的值

转载 作者:行者123 更新时间:2023-11-30 04:15:09 26 4
gpt4 key购买 nike

遇到一个很奇怪的问题,谁知道这是什么原因?代码在 Visual Studio 2012 下测试。

#include <iostream>
struct A {
int a;
};
struct B {
int b;
};
struct C : public A, public B {
int c;
};

int main() {
int C::*p = &C::b;
std::printf("%p\n", &C::b); //00000000
std::printf("%p\n", p); //00000004
return 0;
}

最佳答案

指向成员的指针不仅仅是普通的 C 指针,所以将它们传递给 printf 实际上是未定义的行为,因为 printf 会相信 "%p " 并将指向成员的指针转换为 void*

标准允许的成员指针的唯一转换在第 4.11 段中列出:

  1. 空指针常量可以转换为空成员指针值
  2. B::*T 可以转换为 D::*T 如果 B 是 D 的可访问、无歧义和非虚基类。

指向成员的指针实际上可以具有不同的大小,具体取决于它们指向的类。

有关 MSVC 中指向成员的实现的更多信息,请参见此处:http://blogs.msdn.com/b/oldnewthing/archive/2004/02/09/70002.aspx

关于c++ - C++中指向数据成员的指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510344/

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