blu*_*kin 1 c++ pointers object member object-layout
为什么以下代码中的if条件产生true?
struct A
{
int firstMember;
} a1;
if (&a1 == static_cast<void*>(&a1.firstMember)) std::cout << "equal";
Run Code Online (Sandbox Code Playgroud)
在阅读Stroustrup关于空类的FAQ时,我有点困惑,特别是下面的陈述:
if (p1 == p2) cout << "nice: good optimizer";
Run Code Online (Sandbox Code Playgroud)
Kos*_*Kos 18
您的代码中没有涉及引用.不要将"address-of"运算符(也&)与引用混淆.
您的条件返回true,因为在这种情况下,对象从内存中的第一个(也是唯一的)字段开始.就是这种情况,即所谓的POD(普通旧数据)对象,但并非总是如此.
例如,如果您的类包含任何虚函数,则该条件可能为false.不要依赖它.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |