为什么以下代码中的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/

10-11 22:59