为什么以下代码中的if条件产生true?
struct A
{
int firstMember;
} a1;
if (&a1 == static_cast<void*>(&a1.firstMember)) std::cout << "equal";
在空类上阅读Stroustrup's FAQ时,我有些困惑,特别是下面的语句:
if (p1 == p2) cout << "nice: good optimizer";
最佳答案
您的代码中没有引用。不要将“address-of”运算符(也称为&
)与引用混淆。
您的条件返回true,因为在这种情况下,恰好该对象与它的第一个(也是唯一的)字段在内存中的同一位置开始。就是这种情况,即所谓的POD(普通数据)对象,但并非总是如此。
例如,如果您的类包含任何虚函数,则条件很可能为假。不要依赖它。
关于c++ - 指向对象的指针==指向第一个成员的指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4308076/