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

时间:2017-08-23 07:25:05

标签: c++ compiler-optimization

如果代码输入了一个范围并定义了一个与外部对象同名的新对象,那么新定义的对象是否会被正确定义?
如下代码所示:

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还是?
我可以在gcc中看到,它将为NULL。但是在VS2015中似乎是一个 所以我的问题是标准对于这部分说了什么。非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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