如果代码输入了一个范围并定义了一个与外部对象同名的新对象,那么新定义的对象是否会被正确定义?
如下代码所示:
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中似乎是一个
所以我的问题是标准对于这部分说了什么。非常感谢。
答案 0 :(得分:0)
不要这样做。事实上,你必须在这里问,答案不是100%显而易见,这意味着任何阅读代码的人也会被它混淆。作为一个纯粹的学术问题,知道它是否有效是很有趣的,但在任何真正的代码中只需这样做:
ClassA x;
if (some condition)
{
ClassB y(&x);
}