64位c++指针赋值

c++ pointer assignment in 64bit

本文关键字:赋值 指针 c++ 64位      更新时间:2023-10-16

我正在尝试这样做

//A.h
class P;
class A
{
  A(P* pp) { p = pp; }
  P* p;
};
//B.h
#include "P.h"
class B : public A
{
   B(A* aa);
};
//B.cpp
B::B(P* pp) : A(pp)
{}

问题是当例如

pp = 0x00000000024af3f0 

但赋值后

p = 0x024af3f0cdcdcdcd

这只发生在64位。如果我不使用P的前向申报也没有问题。如果我用p = pp;在B的构造函数中没有问题

如果在向class A添加数据后忘记重新编译某个源文件,就会发生这种情况。p的偏移量改变了(在您的例子中,改变了四个字节),但是只有一个源文件知道它。