构造具有相同对象名称的对象时将如何发生

How will it happen when construct an object with the same object name

本文关键字:对象 何发生      更新时间:2023-10-16

如果代码进入一个作用域并定义了一个与外部对象同名的新对象,新定义的对象是否会被正确定义?
如以下代码所示:

class ClassB
{
ClassA* p;
ClassB(ClassA* a)
{
p = NULL;
if (a != NULL)
p = a;
}
};
ClassA x;
if (some condition)
{
ClassB x(x);
// Will x->p be NULL or it will be pointer a?
}

在 if 作用域中,x-> 在这里是 NULL 还是 a?
我可以在 gcc 中看到,它将是空的。但是在VS2015中似乎是一个.
所以我的问题是标准对这部分有什么说法

。 非常感谢。

只是不要这样做。事实上,你必须在这里问,而且答案不是100%显而易见的,这意味着其他任何阅读代码的人也会对此感到困惑。作为一个纯粹的学术问题,知道它是否有效是很有趣的,但在任何真正的代码中,只需这样做:

ClassA x;
if (some condition)
{
ClassB y(&x);
}