我的代码的一些片段在
之下static const int s_kVar1 = 0;
static const int s_kVar2 = 1;
...
void foo()
{
MyObject *o = new MyObject();
// Is it ever possible that (o == &s_kVar1) or (o == &s_kVar2)
}
答案 0 :(得分:1)
简短的回答是否定的。保证不同的对象具有不同的地址。全局(s_kVar)和动态分配的对象(o)进入不同的内存区域。
P.S。但是,是的,你可以滥用语言来打破这种保证。您可以在同一个内存位置构建两个不同的对象。
答案 1 :(得分:0)
没有。静态变量存储在.BSS或.DATA段中,具体取决于它们是初始化还是未初始化(0初始化)。在你的情况下,
static const int s_kVar1 = 0;将进入.BSS和 static const int s_kVar2 = 1;将进入.DATA
堆用于动态分配。
BTW我不明白为什么你在文件范围使用静态const。 const默认使内部链接,全局变量具有静态生命周期。当然,除非您使用C,否则我可以看到它有用。