Как это произойдет при создании объекта с таким же именем

Если код вошел в область и определил новый объект с тем же именем, что и внешний объект, будет ли правильно определен вновь определенный объект?
Как показано в следующем коде:

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 это кажется.
Итак, мой вопрос в том, что стандарт говорит об этой части. Большое спасибо.


person Yaochun Li    schedule 23.08.2017    source источник


Ответы (1)


Просто не делай этого. Тот факт, что вы должны спросить здесь и что ответ не на 100% очевиден, означает, что любой, кто читает код, также будет сбит с толку. Как чисто академический вопрос, интересно знать, будет ли это работать, но в любом реальном коде просто сделайте это:

ClassA x;
if (some condition)
{
    ClassB y(&x);
}
person 463035818_is_not_a_number    schedule 23.08.2017
comment
Я думаю, что вопрос был скорее в том, был ли второй x инициализирован как int x {x}; будет ли его значение значением первого x или его значение будет таким, каким оно было до инициализации - person Andrew Kashpur; 23.08.2017
comment
@AndrewKashpur попытался исправить ответ. Теперь это скорее комментарий, но я просто оставлю его, если он не получит слишком много голосов против ... - person 463035818_is_not_a_number; 23.08.2017